在Swift中,[someTextField].resignFirstResponder()
和self.view.endEditing(true)
都完成了同样的任务 - 将键盘从用户的视图中隐藏起来,并对任何文本字段使用它进行去焦点。我理解前者是特定于某个特定领域,而后者包含整个视图,但除了想要定位特定文本字段之外,何时优先/推荐另一个?
答案 0 :(得分:93)
someTextField.resignFirstResponder()
resignFirstResponder()
就可以使用。这可以比替代方案稍微更有效,但如果你正在做一些事情,比如创建一个自定义控件,这可能很有意义。也许你有一个文本字段,当" Next"按下按钮,您想要摆脱键盘并提供日期选择器,例如。在这里,我肯定会使用resignFirstResponder()
self.view.endEditing(true)
我通常保留这种情况,因为无论出于何种原因,无论当前发生什么,我都绝对需要清除键盘。也许,我有一个幻灯片菜单?在滑出之前,无论发生什么事情,键盘都应该消失,因此我确保所有都会重新启动其第一响应者状态。重要的是要注意endEditing()
将查看子视图的整个层次结构,并确保第一个响应者的状态是什么。如果你已经对第一个响应者有一个具体的引用,那么调用resignFirstResponder()
的效率就会降低,但如果没有,那么比查找该视图并让它辞职更容易。
答案 1 :(得分:15)
没有这样严格的规则。
当您拥有当前持有第一响应者状态的文本字段的引用时,可以使用resignFirstResponder
。当你没有参考或者你不确定时,endEditing
就可以了。
但有一点需要注意endEditing
有一个我们偶尔设置为true
的布尔参数。通过将此参数设置为true
,已调用endEditing
的视图将强制每个子文本字段重新签名第一响应者状态,而不管它是否从{{返回false
值1}}委托方法。相反,使用textFieldShouldEndEditing
调用endEditing
只会请求(不强制)文本字段重新签名,尊重false
协议方法的返回值。