resignFirstResponder与endEditing for Keyboard Dismissal

在Swift中, [someTextField].resignFirstResponder()[someTextField].resignFirstResponder() self.view.endEditing(true)完成相同的任务 – 从用户的视图中隐藏键盘,并取消任何文本字段使用它。 我理解前者是特定于某个特定领域的,而后者则包含整个观点,但除了想要针对某个特定的文本领域,哪一个更适合于另一个领域?

someTextField.resignFirstResponder()

resignFirstResponder()是很好的使用任何时候你确切地知道哪个文本字段是第一响应者,你想要辞去其第一响应者的状态。 这可以稍微高效一些,但是如果你正在做某些事情,比如创build一个自定义控件,这可能会有很大的意义。 也许你有一个文本字段,当按下“下一步”button,你想摆脱键盘和呈现dateselect器,例如。 在这里,我肯定会使用resignFirstResponder()

self.view.endEditing(true)

我通常保留这个场景,因为无论出于何种原因,无论当前正在进行什么操作,我都绝对需要清除键盘。 也许,我有一个滑动菜单? 就在这个滑出之前,不pipe发生什么事情,键盘应该消失,所以我会确保所有的事情都是第一个响应者的状态。 需要注意的是, endEditing()将查看子视图的整个层次结构,并确保第一个响应者的状态是什么。 如果你已经有了对第一个响应者的具体引用,那么调用resignFirstResponder()会降低效率,但是如果不是这样的话,比find这个视图并让它退出更容易。

没有这样严格的规定。

当您有当前拥有第一响应者状态的文本字段的引用时,使用resignFirstResponder 。 当你没有参考或者你不确定, endEditing会做的。

但是有一点需要注意, endEditing有一个布尔参数,我们偶尔会设置为true 。 通过将此参数设置为true ,已调用endEditing的视图将强制每个子文本字段退出第一个响应者状态,而不endEditing是否从textFieldShouldEndEditing委托方法返回了false值。 相反,使用false调用endEditing只会要求(而不是强制)文本字段的退出,尊重textFieldShouldEndEditing协议方法的返回值。