我在模态表格(iPad)中有一个表格视图,其中一个单元格包含一个UITextField。我的视图控制器保存对文本字段的引用,也是其委托。
当文本字段点击Return时,我会将其告诉-resignFirstResponder
内的-textFieldShouldReturn:
。在另一种情况下,我想强制它结束编辑,所以我将整个表视图告诉-endEditing:YES
。然后我释放我对文本字段的本地引用,并重新加载该行以用其他东西替换它。
在任何一种情况下,键盘都不会消失。我不知道出了什么问题,我不确定如何进一步调试。我从来没有遇到任何其他文本编辑的粘性键盘问题 - 第一个响应者辞职总是按预期进行。
有什么想法?感谢。
答案 0 :(得分:21)
Apple文档describe this exception:
在iPad上,如果视图控制器使用模态显示其视图 “表单”样式,键盘一旦显示,直到被隐藏 用户点击关闭键或模态视图控制器 以编程方式解雇。这种行为的目的是避免 当用户在视图之间移动时,动画过多, 但不完全是文本字段。
这适用于此处(iPad上的模态表单)。在这种情况下,显然不可能解雇键盘。超。 :\
答案 1 :(得分:11)
实施-disablesAutomaticKeyboardDismissal
并返回NO。 可以在iOS 6上运行,但您必须在正确的控制器中实现它。如果你有一个带有文本字段的子控制器的模态表单导航控制器,那么导航控制器需要方法实现,而不是子项。
答案 2 :(得分:1)
由于disablesAutomaticKeyboardDismissal覆盖在iOS6上不起作用,我必须将每个文本字段的“Do End On Exit”事件连接到方法,然后在那里解除键盘,如下所示:
- (IBAction)doneEditing:(id)sender {
[sender endEditing:YES];
}
答案 3 :(得分:0)
{7}在iOS 7上拒绝为我工作。
但是......我设法通过禁用屏幕上的UITextFields来解决这个问题。
我的解决方案描述为here。
这甚至适用于Modal disablesAutomaticKeyboardDismissal
s。
答案 4 :(得分:0)
我刚刚发现了这种情况发生的独特情况。我认为当被解雇时将键盘留在屏幕上。我检查了所有内容,我的UITextFields代表已连接到我的视图等。试图在viewWillDisappear()中手动关闭键盘无法通过字段上的resignFirstResponder()或视图上的endEditing()进行操作。
然后我意识到这是委托方法本身的字段验证代码。每次编辑在字段中结束时,我都会在textFieldShouldEndEditing委托方法中验证文本,以确保文本是合理的,就像这样,并且在验证之前不允许它们跳出字段。
func textFieldShouldEndEditing(textField: UITextField) -> Bool
{
if self.validateField(textField) {
return true
} else {
return false
}
}
因此,当用户在没有输入任何文本的情况下返回上一个视图时,验证失败,不允许文本字段放弃它的第一个响应者状态,并且键盘在返回到上一个视图时仍保留在屏幕上。
这是一种不寻常的情况,但希望这会帮助遇到它的其他人。
答案 5 :(得分:0)
在swift中,只需给你的UITextField一个委托并生成textFieldShouldReturn(),见下面的例子 -
class ViewController: UIViewController, UITextFieldDelegate {
func settingUpTextField() {
textField.delegate = self;
return;
}
...
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder();
return true;
}
}
完成!