resignFirstResponder与endEditing键盘解雇

时间:2015-04-26 19:56:53

标签: ios swift uitextfield

在Swift中,[someTextField].resignFirstResponder()self.view.endEditing(true)都完成了同样的任务 - 将键盘从用户的视图中隐藏起来,并对任何文本字段使用它进行去焦点。我理解前者是特定于某个特定领域,而后者包含整个视图,但除了想要定位特定文本字段之外,何时优先/推荐另一个?

2 个答案:

答案 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协议方法的返回值。