1 keyboard uitableview uipopovercontroller ios
我的iOS键盘有问题.我在UITableViewCell中有一个UITextField.当在同一个TableView中点击另一个TableViewCell时,我想在显示UIPopoverController之前解除键盘.所有这些都显示在表单中.
这是视图层次结构:
UINavigationController,显示为 UIModalPresentationFormSheet
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];
}
Run Code Online (Sandbox Code Playgroud)
正如你可以从代码中看到的,我打过电话resignFirstResponder,并endEditing和我试图创建一个临时的文本字段.我也尝试过实现disablesAutomaticKeyboardDismissal,但从未调用过.
谁能看到我做错了什么?
[nameTextField resignFirstResponder]应该足够了.可能是IBOutlet没有正确绑定,或者还有其他东西是第一响应者.
尝试这个答案来解雇当前的第一响应者.但是,如果这确实有效,我建议您在直接引用它时仍然会研究为什么它不会被解雇的问题.
我会建议tempTextField在尝试之前删除.
我链接的答案是有用的,你可以使用它,但它更适合你有几个TextFields并且你不一定知道哪个是第一个响应者.
希望这可以帮助
更新
根据苹果的文档为disablesAutomaticKeyboardDismissal:
当视图控制器的模式表示样式设置为UIModalPresentationFormSheet并且其他表示样式返回NO时,此方法的默认实现返回YES.因此,系统通常不允许键盘被解雇用于模态形式.
所以只需在控制器中覆盖它并返回 NO
- (BOOL)disablesAutomaticKeyboardDismissal {
return NO;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1453 次 |
| 最近记录: |