' resignFirstResponder()'返回true并且文本字段失去焦点但键盘不会消除

时间:2015-10-10 08:34:17

标签: swift keyboard uitextfield uiresponder resignfirstresponder

我有一个只有两个UITextField的故事板场景。第一个是未触动,刚刚从对象库中删除。第二个代码出口连接到ViewController代码。

App's interface

The second text field's connection in IB

(抱歉,我必须以这种方式发布图片,因为StackOverflow不会让我这么做。)

代码非常简单。这就是全部。

class ViewController: UIViewController, UITextFieldDelegate {    
    func textFieldDidBeginEditing(textField: UITextField) {
        textField.resignFirstResponder()
    }
}

它唯一能做的就是在键盘即将出现时将其取下。

第一个正常显示键盘。第二个没有显示键盘,因为它立即被解雇。

这一切都完全可以自己完成,直到我点击第一个文本字段以调出键盘,然后使用键盘在屏幕上,我单击第二个文本字段。 接下来会发生的是第二个文本字段失去焦点,但键盘仍然在屏幕上。

使用print(:),我验证了当我在第二个文本字段上调用resignFirstResponder时,它是第一个响应者,并且该调用的返回值为{{1}在通话结束后,它不再是第一个响应者。

但键盘还在那里......

我尝试在委托的true方法中添加print(:),然后在文本字段重新签名后点击返回键。调试控制台中没有打印任何内容。

我尝试了textFieldShouldReturn(:),但disablesAutomaticKeyboardDismissal()false都没有产生任何差异。

修改

我想要的很简单: 我希望第一个文本字段可以执行默认操作,第二个文本字段一旦点击它就会解除其键盘(从用户的角度来看,基本上意味着不显示它)。

我知道true,但由于各种原因我无法使用它,我只需要解除键盘 之后被激活了。

再次编辑

我也试过textFieldShouldBeginEditing(:)。实际上,我在场景中的每个视图上都尝试了view.endEditing(true)。不行。

1 个答案:

答案 0 :(得分:1)

尝试那样的事情:

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    view.endEditing(true)
    return true
}

func textFieldDidBeginEditing(textField: UITextField) {
    textField.resignFirstResponder()
    //make here whatever you like

}