Ios UIDatePicker未在UITable上的正确位置显示

Ios UIDatePicker未在UITable上的正确位置显示,ios,objective-c,uitableview,uidatepicker,Ios,Objective C,Uitableview,Uidatepicker,我有一个UITableCell,在该单元格上有一个UITextBox,当单击该文本框而不是显示键盘时,将显示一个UIDatePicker,代码如下。但是我很难定位UIDatePicker。我需要它从页面的最底部开始,此时它似乎从按下文本框的表格部分的顶部开始。当用户单击首选日期标签时,将触发该代码。有什么建议吗?我附加了一个图像以显示当前渲染的位置。谢谢 - (IBAction)selectDateBegin:(id)sender { //Disable Keyboard [

我有一个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];
}


不要那样做。创建一个日期选择器,并将其设置为文本字段的
inputView
。然后,系统将在正确的位置用正确的动画而不是键盘为您呈现它。

不要这样做。创建一个日期选择器,并将其设置为文本字段的
inputView
。然后,系统将在正确的位置用正确的动画而不是键盘为您呈现它。

我建议您做的是用以下指令替换文本字段(默认为键盘)的inputView:

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

[preferredDateField setInputView:datePicker];

它更合适,并且符合苹果人机界面指南

我建议您使用以下指令替换文本字段(默认为键盘)的inputView:

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

[preferredDateField setInputView:datePicker];

它更合适,并且符合苹果的人机界面指南

谢谢@Lolloz89我会那样做的。谢谢@Lolloz89我会那样做的。