从uitableviewcell内的文本字段中取消iPad上的键盘

时间:2013-08-16 23:41:23

标签: ios uitableview keyboard uipopovercontroller

我的iOS键盘有问题。我在UITableViewCell中有一个UITextField。当在同一个TableView中点击另一个TableViewCell时,我想在显示UIPopoverController之前解除键盘。所有这些都显示在表单中。

以下是视图层次结构:

  • Root View Controller
    • UINavigationController,显示为UIModalPresentationFormSheet
      • 表视图控制器
        • 表格查看单元格1
          • 文字字段
        • 表格查看单元格2
          • 点击时:UIPopoverController包含UIDatePicker

在此图表中,我想在tableView:didSelectRowAtIndexPath:中添加代码,以便在显示UIPopoverController之前解除键盘。这在iPhone上不是问题,因为我使用全屏模态视图控制器而不是弹出控制器。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // nameTextField is the text field in Table View Cell 1
    [nameTextField resignFirstResponder];

    UITextField *tempTextField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 100, 10)];
    [self.view addSubview:tempTextField];
    [self.view setNeedsDisplay];
    tempTextField.enabled = NO;
    [tempTextField becomeFirstResponder];
    [tempTextField resignFirstResponder];
    [tempTextField removeFromSuperview];

    [self.view endEditing:YES];

    KDDatePickerViewController *dpvc = [[KDDatePickerViewController alloc] init];
    popoverController = [[UIPopoverController alloc] initWithContentViewController:dpvc];
    [popoverController presentPopoverFromRect:[self.tableView cellForRowAtIndexPath:indexPath].frame
                                       inView:self.view
                     permittedArrowDirections:UIPopoverArrowDirectionAny
                                     animated:YES];
}

从代码中可以看出,我尝试调用resignFirstResponderendEditing,并尝试创建临时文本字段。 我也试过实现disablesAutomaticKeyboardDismissal,但它从未被调用过。

谁能看到我做错了什么?

2 个答案:

答案 0 :(得分:6)

[nameTextField resignFirstResponder]就足够了。可能是IBOutlet没有正确绑定,或者还有其他东西是第一响应者。

尝试this answer解雇当前的第一响应者。但是,如果这确实有效,我建议您在直接引用它时仍然会研究为什么它不会被解雇的问题。

我建议在尝试之前删除tempTextField

我链接的答案很有帮助,您可以使用它,但如果您有多个TextFields并且您不一定知道哪个是第一个响应者,则更合适。

希望这会有所帮助

<强>更新

根据disablesAutomaticKeyboardDismissal的{​​{1}}:

  

此方法的默认实现在模态时返回YES   视图控制器的表示样式设置为   UIModalPresentationFormSheet并为其他演示文稿返回NO   样式。因此,系统通常不允许键盘   以模态形式被驳回。

所以只需在控制器中覆盖它并返回NO

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}

答案 1 :(得分:1)

请勿创建随机新视图以尝试强制键盘。 UIView已经提供了一项功能。尝试:

[tableView endEditing:YES];