2

私は新しい UIAlertController を認識していますが、UIViewController を作成し、UIPickerView をサブビューとして追加し、モーダルに表示する以外の解決策を見たことがありません。これはおそらく、デリゲートを追加して情報を渡すことを意味します:(

内部にピッカーがある UIAlertController を使用する例を誰でも投稿できますか? すべて同じコントローラー内にありますか?

ありがとう

4

4 に答える 4

1

iOS8 では、ActionSheetPicker-3.0が日付ピッカーやその他のピッカーに最適なソリューションです。

アニメーション

于 2014-09-21T18:35:31.693 に答える
1

DatePicker を UIActionSheet に埋め込まないでください。iOS 7 以降、UIActionSheet はカスタム サブビューを保持することは想定されていません。iOS 8 では、ActionSheet に追加されたサブビューが表示されないことを保証できます。

代わりに、ActionSheet をシミュレートするためにできることは次のとおりです (以下は、下からアニメーション化し、その上にボタンがある UIToolbar を保持する Date Picker の例です)。

2 つのプロパティを作成します。

@property (strong, nonatomic) UIDatePicker *theDatePicker;
@property (strong, nonatomic) UIView *pickerView;

ピッカーを作成し、UIView に埋め込んで表示します。

    -(void) createDatePickerAndShow {

        UIToolbar *controlToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, pickerView.bounds.size.width, 44)];

        [controlToolbar sizeToFit];

        UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

        UIBarButtonItem *setButton = [[UIBarButtonItem alloc] initWithTitle:@"Set" style:UIBarButtonItemStyleDone target:self action:@selector(dismissDateSet)];

        UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelDateSet)];

        [controlToolbar setItems:[NSArray arrayWithObjects:spacer, cancelButton, setButton, nil] animated:NO];


        [theDatePicker setFrame:CGRectMake(0, controlToolbar.frame.size.height - 15, theDatePicker.frame.size.width, theDatePicker.frame.size.height)];

        if (!pickerView) {
            pickerView = [[UIView alloc] initWithFrame:theDatePicker.frame];
        } else {
            [pickerView setHidden:NO];
        }


        CGFloat pickerViewYpositionHidden = self.view.frame.size.height + pickerView.frame.size.height;

        CGFloat pickerViewYposition = self.view.frame.size.height - pickerView.frame.size.height;

        [pickerView setFrame:CGRectMake(pickerView.frame.origin.x,
                                        pickerViewYpositionHidden,
                                        pickerView.frame.size.width,
                                        pickerView.frame.size.height)];
        [pickerView setBackgroundColor:[UIColor whiteColor]];
        [pickerView addSubview:controlToolbar];
        [pickerView addSubview:theDatePicker];
        [theDatePicker setHidden:NO];


        [self.view addSubview:pickerView];

        [UIView animateWithDuration:0.5f
                         animations:^{
                             [pickerView setFrame:CGRectMake(pickerView.frame.origin.x,
                                                             pickerViewYposition,
                                                             pickerView.frame.size.width,
                                                             pickerView.frame.size.height)];
                         }
                         completion:nil];

    }

DatePicker を閉じるには:

    -(void) cancelDateSet {    
    CGFloat pickerViewYpositionHidden = self.view.frame.size.height + pickerView.frame.size.height;    

        [UIView animateWithDuration:0.5f
                         animations:^{
                             [pickerView setFrame:CGRectMake(pickerView.frame.origin.x,
                                                             pickerViewYpositionHidden,
                                                             pickerView.frame.size.width,
                                                             pickerView.frame.size.height)];
                         }
                         completion:nil];
    }
于 2014-09-21T19:39:43.360 に答える
0

注意が必要な最初のコメントに少し間違いがあると思います。これは編集後のコードです。

    @property (strong, nonatomic) UIDatePicker *theDatePicker;
    @property (strong, nonatomic) UIView *pickerView;
- (IBAction)createDatePickerAndShow:(id)sender;

次に createDatePickerAndShow ボタンにリンクします。その後、ピッカーを作成し、それを UIView に埋め込んで表示します。

//.................Edit to (IBAction)createDatePickerAndShow:(id)sender 

 - (IBAction)createDatePickerAndShow:(id)sender {



        UIToolbar *controlToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, _pickerView.bounds.size.width, 44)];

        [controlToolbar sizeToFit];

        UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

//............add this to disable the warning of @selector(dismissDateSet)]

      #pragma GCC diagnostic ignored "-Wundeclared-selector"

        UIBarButtonItem *setButton = [[UIBarButtonItem alloc] initWithTitle:@"done" style:UIBarButtonItemStyleDone target:self action:@selector(dismissDateSet)];

//...........Edit to UIBarButtonItemStylePlain that is supported in ios 8

        UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"cancel" style:UIBarButtonItemStylePlain target:self action:@selector(cancelDateSet)];

        [controlToolbar setItems:[NSArray arrayWithObjects: cancelButton, spacer, setButton, nil] animated:NO];


        [_theDatePicker setFrame:CGRectMake(0, controlToolbar.frame.size.height - 15, _theDatePicker.frame.size.width, _theDatePicker.frame.size.height)];

        if (!_pickerView) {
            _pickerView = [[UIView alloc] initWithFrame:_theDatePicker.frame];
        } else {

//.................here edit _pickerView    

    [_pickerView setHidden:NO];
        }


        CGFloat pickerViewYpositionHidden = self.view.frame.size.height + _pickerView.frame.size.height;

        CGFloat pickerViewYposition = self.view.frame.size.height - _pickerView.frame.size.height;

        [_pickerView setFrame:CGRectMake(_pickerView.frame.origin.x,
                                        pickerViewYpositionHidden,
                                        _pickerView.frame.size.width,
                                        _pickerView.frame.size.height)];
        [_pickerView setBackgroundColor:[UIColor whiteColor]];
        [_pickerView addSubview:controlToolbar];
        [_pickerView addSubview:_theDatePicker];
        [_theDatePicker setHidden:NO];


        [self.view addSubview:_pickerView];

        [UIView animateWithDuration:0.5f
                         animations:^{
                             [_pickerView setFrame:CGRectMake(_pickerView.frame.origin.x,
                                                             pickerViewYposition,
                                                             _pickerView.frame.size.width,
                                                             _pickerView.frame.size.height)];
                         }
                         completion:nil];



    }

そして、同じように DatePicker を閉じるには:

-(void) cancelDateSet  {

    CGFloat pickerViewYpositionHidden = self.view.frame.size.height + _pickerView.frame.size.height;

    [UIView animateWithDuration:0.5f
                     animations:^{
                         [_pickerView setFrame:CGRectMake(_pickerView.frame.origin.x,
                                                         pickerViewYpositionHidden,
                                                         _pickerView.frame.size.width,
                                                         _pickerView.frame.size.height)];
                     }
                     completion:nil];
}
于 2014-12-11T21:43:53.053 に答える