【问题标题】:'resignFirstResponder()' returns true and the text field loses focus but the keyboard does not dismiss'resignFirstResponder()' 返回 true 并且文本字段失去焦点但键盘不会关闭
【发布时间】:2016-01-08 05:04:45
【问题描述】:

我有一个情节提要场景,只有两个 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时,它是第一响应者,并且该调用的返回值是true,调用之后它是不再是第一响应者。

但是键盘还在……

我尝试在委托的textFieldShouldReturn(:) 方法中添加print(:),并在文本字段退出后单击返回键。调试控制台中没有打印任何内容。

我试过disablesAutomaticKeyboardDismissal(),返回falsetrue 都没有产生任何差异。

编辑

我想要的很简单: 我希望第一个文本字段执行默认操作,第二个文本字段在被点击后立即关闭其键盘(从用户的角度来看,基本上意味着不显示它)。

我知道textFieldShouldBeginEditing(:),但是由于各种原因我不能使用它,我只需要关闭键盘它被激活之后。

再次编辑

我也试过view.endEditing(true)。事实上,我在场景中的每个视图上都尝试了.endEditing(true)。没用。

【问题讨论】:

    标签: swift keyboard uitextfield uiresponder resignfirstresponder


    【解决方案1】:

    试试这样:

    func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
        view.endEditing(true)
        return true
    }
    
    func textFieldDidBeginEditing(textField: UITextField) {
        textField.resignFirstResponder()
        //make here whatever you like
    
    }
    

    【讨论】:

    • 对不起,我没有让我的意图更清楚。我对第一个文本字段的行为不感兴趣。我想关闭第二个文本字段的键盘。而且我已经尝试过 endEditing。它似乎不起作用。请查看我对问题的修改。
    • 有效!并且用endEditing(true) 调用替换for-in 循环也可以。你能告诉我为什么它有效吗?
    • 我把它改成了 view.Enditing(true) - 更清楚:)
    • 之所以有效,是因为 textField 在 textFieldDidBeginEditing 中成为 firstResponder。
    猜你喜欢
    • 2011-02-08
    • 2011-03-21
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多