Swift ';辞职FirstResponder()';返回true,文本字段失去焦点,但键盘不会关闭
我有一个故事板场景,只有两个Swift ';辞职FirstResponder()';返回true,文本字段失去焦点,但键盘不会关闭,swift,keyboard,uitextfield,uiresponder,resignfirstresponder,Swift,Keyboard,Uitextfield,Uiresponder,Resignfirstresponder,我有一个故事板场景,只有两个UITextField。第一个未被触及,刚从对象库中取出。第二个代理插座连接到ViewController的代码 (很抱歉,我必须以这种方式发布图像,因为StackOverflow不允许我这样做。) 代码非常简单。这就是全部 class ViewController: UIViewController, UITextFieldDelegate { func textFieldDidBeginEditing(textField: UITextFiel
UITextField
。第一个未被触及,刚从对象库中取出。第二个代理插座连接到ViewController
的代码
(很抱歉,我必须以这种方式发布图像,因为StackOverflow不允许我这样做。)
代码非常简单。这就是全部
class ViewController: UIViewController, UITextFieldDelegate {
func textFieldDidBeginEditing(textField: UITextField) {
textField.resignFirstResponder()
}
}
它所做的唯一一件事就是在键盘即将出现时关闭键盘
第一个正常显示键盘。第二个没有显示键盘,因为它会立即被取消
这一切都可以自己完美地工作,直到我单击第一个文本字段以打开键盘,然后使用屏幕上的键盘,我单击第二个文本字段。
接下来发生的事情是,第二个文本字段失去焦点,但键盘仍在屏幕上
使用print(:)
,我已经验证了,当我在第二个文本字段上调用resignFirstResponder
时,它是第一个响应者,该调用的返回值是true
,调用后它不再是第一个响应者
但是键盘还在那里
我尝试在代理的文本字段shouldReturn(:)
方法中添加print(:)
,并在文本字段退出后单击return键。调试控制台中没有打印任何内容
我尝试了disablesAutomaticKeyboardDismissal()
,返回的false
和true
都不会产生任何差异
编辑
我想要的很简单:
我希望第一个文本字段执行默认的操作,第二个文本字段在点击后立即关闭键盘(从用户的角度来看,基本上是指不显示)
我知道textfield应该开始编辑(:)
,但由于各种原因,我不能使用它,我只需要在键盘被激活后关闭它
重新编辑
我也尝试了view.endEditing(true)
。事实上,我在场景中的每个视图上都尝试了.endEditing(true)
。不起作用。试着这样做:
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
view.endEditing(true)
return true
}
func textFieldDidBeginEditing(textField: UITextField) {
textField.resignFirstResponder()
//make here whatever you like
}
对不起,我没有说清楚我的意图。我对第一个文本字段的行为不感兴趣。我想关闭第二个文本字段的键盘。我已经试过了。它似乎不起作用。请查看我对问题的编辑。它有效!用
endEditing(true)
调用替换for-in循环同样有效。你能告诉我为什么它能工作吗?我把它改为view.Enditing(true)-更清楚:)它能工作是因为textField成为textfielddbeginediting的第一响应者。