【发布时间】:2016-01-08 05:04:45
【问题描述】:
我有一个情节提要场景,只有两个 UITextField。第一个 未触及,刚从对象库中取出。第二个的代理出口连接到ViewController 的代码。
The second text field's connection in IB
(对不起,我必须以这种方式发布图像,因为 StackOverflow 不允许。)
代码非常简单。这就是全部。
class ViewController: UIViewController, UITextFieldDelegate {
func textFieldDidBeginEditing(textField: UITextField) {
textField.resignFirstResponder()
}
}
它唯一做的就是在键盘即将出现时关闭它。
第一个正常显示键盘。第二个不显示键盘,因为它立即被关闭。
这一切都可以完美运行,直到我单击第一个文本字段以调出键盘,然后使用键盘在屏幕上,我单击第二个文本字段。 接下来发生的是,第二个文本字段失去了焦点,但键盘仍然在屏幕上。
使用print(:),我已经验证,当我在第二个文本字段上调用resignFirstResponder时,它是第一响应者,并且该调用的返回值是true,调用之后它是不再是第一响应者。
但是键盘还在……
我尝试在委托的textFieldShouldReturn(:) 方法中添加print(:),并在文本字段退出后单击返回键。调试控制台中没有打印任何内容。
我试过disablesAutomaticKeyboardDismissal(),返回false 和true 都没有产生任何差异。
编辑
我想要的很简单: 我希望第一个文本字段执行默认操作,第二个文本字段在被点击后立即关闭其键盘(从用户的角度来看,基本上意味着不显示它)。
我知道textFieldShouldBeginEditing(:),但是由于各种原因我不能使用它,我只需要关闭键盘在它被激活之后。
再次编辑
我也试过view.endEditing(true)。事实上,我在场景中的每个视图上都尝试了.endEditing(true)。没用。
【问题讨论】:
标签: swift keyboard uitextfield uiresponder resignfirstresponder