UIPickerView
をUIActionsheet
に追加していますが、ios 7
では完全に機能しますが、ios 8
では機能しません。それを解決するのを手伝ってください。
ここにスクリーンショットを添付しました。
ありがとう
そのために次のコードを使用しています。
UIActionSheet *actionSheet;
NSString *pickerType;
- (void)createActionSheet {
if (actionSheet == nil) {
// setup actionsheet to contain the UIPicker
actionSheet = [[UIActionSheet alloc] initWithTitle:@"Please select" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
actionSheet.backgroundColor = [UIColor clearColor];
UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
pickerToolbar.barStyle = UIBarStyleBlackOpaque;
[pickerToolbar sizeToFit];
UIImageView *imageObj = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 40)];
imageObj.image = [UIImage imageNamed:@"header.png"];
[pickerToolbar addSubview:imageObj];
UIButton *cancelBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[cancelBtn addTarget:self action:@selector(pickerCancel:)forControlEvents:UIControlEventTouchDown];
// [cancelBtn setImage:[UIImage imageNamed:@"btnInviteCancel.png"] forState:UIControlStateNormal];
[cancelBtn setTitle:@"Cancel" forState:UIControlStateNormal];
cancelBtn.frame = CGRectMake(7.0, 7.0, 65.0, 25.0);
[pickerToolbar addSubview:cancelBtn];
UIButton *doneBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[doneBtn addTarget:self action:@selector(pickerDone:)forControlEvents:UIControlEventTouchDown];
//[doneBtn setImage:[UIImage imageNamed:@"btnInviteDone.png"] forState:UIControlStateNormal];
[doneBtn setTitle:@"Done" forState:UIControlStateNormal];
doneBtn.frame = CGRectMake(258.0, 7.0, 55.0, 25.0);
[pickerToolbar addSubview:doneBtn];
[actionSheet addSubview:pickerToolbar];
[pickerToolbar release];
UIPickerView *chPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 200.0)];
chPicker.dataSource = self;
chPicker.delegate = self;
chPicker.showsSelectionIndicator = YES;
[chPicker selectRow:0 inComponent:0 animated:YES];
[actionSheet addSubview:chPicker];
[chPicker release];
[actionSheet showInView:self.view];
[actionSheet setBounds:CGRectMake(0,0,320, 464)];
}
}
Apple UIActionSheet
の内部実装を変更したため、機能しません。 ドキュメント を参照してください。
サブクラス化ノート
UIActionSheetはサブクラス化されるようには設計されていません。nor階層にビューを追加する必要があります。 UIActionSheet APIによって提供されるよりも多くのカスタマイズを使用してシートを表示する必要がある場合、独自のシートを作成し、presentViewController:animated:completion:でモーダルに表示できます。
Important:
UIActionSheet
はiOS 8で非推奨になりました(UIActionSheetDelegate
も非推奨です。)作成および管理するにはiOS 8以降のアクションシートではなく、UIAlertController
をpreferredStyle
のUIAlertControllerStyleActionSheet
とともに使用します。
例えば:
UIAlertController * searchActionSheet=[UIAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
[ searchActionSheet.view setBounds:CGRectMake(7, 180, self.view.frame.size.width, 470)];
//yourView represent the view that contains UIPickerView and toolbar
[searchActionSheet.view addSubview:self.yourView];
[self presentViewController:searchActionSheet animated:YES completion:nil];
まったく同じ動作を備えた、すぐに使用可能なソリューションがあります- ActionSheetPicker-3.0
元のバージョンはUIActionsheet
を使用していましたが、iOS 8リリースではこのプロジェクトをアップグレードし、UIActionsheetを単純なビューに置き換えましたが、アニメーションとビューはまったく同じに見えます。
私もこの問題を発見し、解決策があります。それがあなたを助けることを願っています。
サンプルコードはこちらからダウンロードできます。 https://www.dropbox.com/s/yrzq3hg66pjwjwn/UIPickerViewForIos8.zip?dl=
@interface ViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>{
UIView *maskView;
UIPickerView *_providerPickerView;
UIToolbar *_providerToolbar;
}
- (void) createPickerView {
maskView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
[maskView setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5]];
[self.view addSubview:maskView];
_providerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height - 344, self.view.bounds.size.width, 44)];
UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissActionSheet:)];
_providerToolbar.items = @[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], done];
_providerToolbar.barStyle = UIBarStyleBlackOpaque;
[self.view addSubview:_providerToolbar];
_providerPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height - 300, 0, 0)];
_providerPickerView.backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.5];
_providerPickerView.showsSelectionIndicator = YES;
_providerPickerView.dataSource = self;
_providerPickerView.delegate = self;
[self.view addSubview:_providerPickerView];
}
- (void)dismissActionSheet:(id)sender{
[maskView removeFromSuperview];
[_providerPickerView removeFromSuperview];
[_providerToolbar removeFromSuperview];
}
Uiactionsheet&uiactionsheetdelegateは廃止予定であるため、何も表示されませんios8 https://developer.Apple.com/library/ios/documentation/UIKit/Reference/UIActionSheet_Class/index.html
IOS 8でUIAlertControllerを使用する必要があります。