UIButtonを備えたUIDatePickerをUIActionSheetに表示しようとしています。残念ながら、それは切り取られ、日付ピッカー全体が表示されません。 UIButtonを追加しようとしてもいません。誰もがビュー全体を適切にフィットさせることを提案できますか? UIActionSheetには-initWithFrame:
型のコンストラクターがないため、適切なディメンションを追加する方法がわかりません。
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Date Picker"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:nil];
// Add the picker
UIDatePicker *pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeDate;
[menu addSubview:pickerView];
[menu showInView:self.view];
[pickerView release];
[menu release];
私も似たようなもので試しました:
UIActionSheet *menu = [[UIActionSheet alloc] initWithFrame:CGRectMake(200.0, 200.0, 100.0f, 100.0f)];
座標はもちろん現実的ではありませんが、UIActionSheetの位置/サイズには影響しないようです。
次のようなものを使用できます(座標を調整します):
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Date Picker"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:nil];
// Add the picker
UIDatePicker *pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeDate;
[menu addSubview:pickerView];
[menu showInView:self.view];
[menu setBounds:CGRectMake(0,0,320, 500)];
CGRect pickerRect = pickerView.bounds;
pickerRect.Origin.y = -100;
pickerView.bounds = pickerRect;
[pickerView release];
[menu release];
ただし、UIDatePickerとナビゲーションバーを使用して全画面表示を作成する方が適切です。例については、iPhone DevCenterのUICatalog-> Pickersサンプルを参照してください。
次の行を追加して、無効なボタンの問題を解決してください
[menu sendSubviewToBack:pickerView];
Dmitryの答えはほぼ正しいです。ただし、アクションシートのフレームが小さすぎるため、ピッカーの下部付近のタッチは無視されます。これらの問題を修正しました。
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Date Picker"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"OK",nil];
// Add the picker
UIDatePicker *pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeTime;
[menu addSubview:pickerView];
[menu showInView:_mainView];
CGRect menuRect = menu.frame;
CGFloat orgHeight = menuRect.size.height;
menuRect.Origin.y -= 214; //height of picker
menuRect.size.height = orgHeight+214;
menu.frame = menuRect;
CGRect pickerRect = pickerView.frame;
pickerRect.Origin.y = orgHeight;
pickerView.frame = pickerRect;
[pickerView release];
[menu release];
これは私のために働く
NSString *title = UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation) ? @"\n\n\n\n\n\n\n\n\n" : @"\n\n\n\n\n\n\n\n\n\n\n\n" ;
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:[NSString stringWithFormat:@"%@%@", title, NSLocalizedString(@"SelectADateKey", @"")]
delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"Ok", nil];
[actionSheet showInView:self.view];
UIDatePicker *datePicker = [[[UIDatePicker alloc] init] autorelease];
datePicker.datePickerMode = UIDatePickerModeDate;
[actionSheet addSubview:datePicker];
少し注意が必要ですが、動作します!
上部のボタン、下部のピッカー:
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Date Picker"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"OK",nil];
// Add the picker
UIDatePicker *pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeTime;
[menu addSubview:pickerView];
[menu showInView:_mainView];
CGRect menuRect = menu.frame;
menuRect.Origin.y -= 214;
menuRect.size.height = 300;
menu.frame = menuRect;
CGRect pickerRect = pickerView.frame;
pickerRect.Origin.y = 174;
pickerView.frame = pickerRect;
[pickerView release];
[menu release];
UITabBarController内にあるときは、下部の対話性の問題を回避するために、UIActionSheetが正しいビューに表示されていることを確認してください。
[actionSheet showInView:self.parentViewController.tabBarController.view];
特定の質問(UIDatePickerをどのように合わせるか)に直接答えない場合もありますが、UIDatePicker(その他)を提示するUIActionSheetの実装については、 ActionSheetPicker を参照してください。 Readmeから:
PickerViewでActionSheetを簡単に提示し、ユーザーが多くの不変のオプションから選択できるようにします。 mobilesafariにあるHTMLドロップダウンの代替に基づきます。
また:
Stack Overflowのmarcioの投稿から派生したコード[ アクションシートにUIPickerViewとボタンを追加-方法? ]
コードを使用しなくても、独自のコードを展開する前に読むのが良いでしょう。
このバージョンは非推奨です。代わりに ActionSheetPicker-3. を使用してください。