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