UITextField的键盘不会消失。 不完全是

我有一个模式表单(iPad)的表格视图,其中一个单元格包含一个UITextField。 我的视图控制器持有对文本字段的引用,也是它的代表。

当文本字段命中返回时,我将它告诉-textFieldShouldReturn:-textFieldShouldReturn: 。 在另一种情况下,我想迫使它结束编辑,所以我告诉整个表视图到-endEditing:YES 。 之后,我释放我的本地引用到文本字段,并重新加载行以replace其他东西。

在任何情况下键盘都不会消失。 我不知道什么是错,我不知道如何进一步debugging。 我从来没有遇到任何其他的文本编辑粘性键盘问题 – 第一个响应的辞职一直performance如预期。

有什么想法吗? 谢谢。

执行-disablesAutomaticKeyboardDismissal并返回NO。 它可以在iOS 6 工作,但是你必须在正确的控制器中实现它。 如果您有带有文本字段的子控制器的模式表单导航控制器,则需要实现方法的导航控制器而不是子级。

(另请参阅closuresIPAD上的键盘 )

苹果文档描述了这个例外 :

在iPad上,如果视图控制器使用“表单”样式以模态方式呈现其视图,则在用户点击解除键或以程序化方式解除模态视图控制器之前,键盘一旦被显示就不被隐藏。 此行为的目的是为了避免过多的animation,因为用户在大部分(但不是全部)文本字段的视图之间移动。

这发生在这里适用(iPad上的模式表单)。 在这种情况下显然是不可能解雇键盘的。 超。 :\

由于disablesAutomaticKeyboardDismissal覆盖不适用于iOS6,我不得不将每个文本字段的“退出结束”事件连接到一个方法,然后closures键盘,如下所示:

 - (IBAction)doneEditing:(id)sender { [sender endEditing:YES]; 

}

disablesAutomaticKeyboardDismissal拒绝为我在iOS 7上工作。

但是…我设法通过简单地禁用屏幕上的UITextFields来解决这个问题。

这里描述我的解决scheme。

这甚至适用于Modal UIViewController

我刚刚发现这种情况发生的独特情况。 我有一个观点,当解散时,把键盘放在屏幕上。 我检查了一切,我的UITextFields代表已连接到我的视图等。尝试在viewWillDisappear()中手动closures键盘无效,通过字段上的resignFirstResponder()或视图上的endEditing()。

然后我意识到这是委托方法本身的字段validation代码。 每次编辑在字段中结束时,我都会validationtextFieldShouldEndEditing委托方法中的文本,以确保文本是合理的,就像这样,并且不允许它们在字段validation前退出该字段。

  func textFieldShouldEndEditing(textField: UITextField) -> Bool { if self.validateField(textField) { return true } else { return false } } 

因此,当用户返回到前一个视图而不input任何文本时,validation失败,文本字段不允许放弃它的第一响应者状态,并且键盘在返回到前一个视图时保持在屏幕上。

这是一个不寻常的情况,但希望这将有助于其他人遇到它。

在swift中给你的UITextField一个委托,并生成textFieldShouldReturn(),例如下面的例子 –

 class ViewController: UIViewController, UITextFieldDelegate { func settingUpTextField() { textField.delegate = self; return; } ... func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder(); return true; } } 

完成了!