37

UIActionSheet に表示する UIButton を持つ UIDatePicker を取得しようとしています。残念ながら、それは切り取られてしまい、日付ピッカー全体が表示されません. まだ 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 の位置/サイズには影響しないようです。

4

7 に答える 7

43

次のようなものを使用できます(座標を調整します):

    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 サンプルを参照してください。

于 2008-12-09T18:42:21.700 に答える
18

無効なボタンの問題を解決するには、次の行を追加してみてください

[menu sendSubviewToBack:pickerView];
于 2009-10-07T08:23:40.647 に答える
17

ドミトリーの答えはほぼ正しいです。ただし、アクションシートのフレームが小さすぎるため、ピッカーの下部付近のタッチは無視されます。私はこれらの問題を修正しました:

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];  
于 2010-09-28T17:19:14.557 に答える
8

これは私のために働く

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];

少しトリッキーですが、うまくいきます!

于 2010-04-20T15:52:57.687 に答える
7

上部にボタン、下部にピッカー:

 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];  
于 2010-07-06T11:57:58.193 に答える
4

下部の対話性の問題を回避するために、UITabBarController内でUIActionSheetを右側のビューに表示するようにしてください。

[actionSheet showInView:self.parentViewController.tabBarController.view];

于 2010-08-10T10:04:23.690 に答える
3

特定の質問 (UIDatePicker を適合させる方法) に直接答えない可能性がありますが、UIDatePicker (他のものも含む) を提示する UIActionSheet の実装については、 ActionSheetPicker を参照してください。Readme から:

PickerView を使用して ActionSheet を簡単に提示し、ユーザーが多数の不変オプションから選択できるようにします。mobilesafari にある HTML ドロップダウン代替に基づいています。

また:

スタック オーバーフローに関する marcio の投稿から派生したいくつかのコード [ Add UIPickerView & a Button in Action sheet - How? ]

コードを使用しない場合でも、独自のコードを作成する前に読むことをお勧めします。


アップデート:

このバージョンは非推奨です。代わりにActionSheetPicker-3.0を使用してください。

于 2011-10-04T12:04:38.817 に答える