2

UITableCellがあり、そのセルにUITextBoxがあります。キーボードが表示される代わりにテキストボックスをクリックすると、UIDatePickerが次のコードで表示されます。しかし、UIDatePickerの配置に問題があります。テキストボックスが押されたテーブルセクションの上部から開始しているように見える瞬間に、ページの一番下から開始する必要があります。ユーザーが優先日ラベルをクリックすると、コードが起動します。ポインタはありますか?現在レンダリングされている場所を示す画像を添付しました。ありがとう。

問題

- (IBAction)selectDateBegin:(id)sender {


    //Disable Keyboard
    [self.txtBookingDate resignFirstResponder];
    //Disable Scrolling
    [_tableForm setScrollEnabled:false];

    if ([self.view viewWithTag:9]) {
        return;
    }
    CGRect toolbarTargetFrame = CGRectMake(0, self.view.bounds.size.height-216-44, 320, 44);
    CGRect datePickerTargetFrame = CGRectMake(0, self.view.bounds.size.height-216, 320, 216);

    UIView *darkView = [[UIView alloc] initWithFrame:self.view.bounds];
    darkView.alpha = 0;
    darkView.backgroundColor = [UIColor blackColor];
    darkView.tag = 9;
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissDatePicker:)] ;
    [darkView addGestureRecognizer:tapGesture];
    [self.view addSubview:darkView];

    UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height+44, 320, 216)] ;
    datePicker.tag = 10;
    [datePicker addTarget:self action:@selector(changeDate:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:datePicker];

    UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height, 320, 44)];
    toolBar.tag = 11;
    toolBar.barStyle = UIBarStyleBlackTranslucent;
    UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissDatePicker:)];
    [toolBar setItems:[NSArray arrayWithObjects:spacer, doneButton, nil]];
    [self.view addSubview:toolBar];

    [UIView beginAnimations:@"MoveIn" context:nil];
    toolBar.frame = toolbarTargetFrame;
    datePicker.frame = datePickerTargetFrame;
    darkView.alpha = 0.5;
    [UIView commitAnimations];
}
4

2 に答える 2

3

textField(デフォルトはキーボード)のinputViewを次の命令に置き換えることをお勧めします。

UIDatePicker *datePicker = [[UIDatePicker alloc] init] ;
[datePicker addTarget:self action:@selector(changeDate:) forControlEvents:UIControlEventValueChanged];

[preferredDateField setInputView:datePicker];

より適切であり、Apple HumanInterfaceGuidelineに準拠しています

于 2013-03-09T13:15:57.203 に答える
1

そのようにしないでください。日付ピッカーを作成し、inputViewテキスト フィールドの として設定します。次に、システムはキーボードの代わりに、適切な場所に適切なアニメーションでそれを表示します。

于 2013-03-09T13:15:31.683 に答える