resignFirstResponder 与 endEditing 键盘关闭
resignFirstResponder vs. endEditing for Keyboard Dismissal
在 Swift 中,[someTextField].resignFirstResponder()
和 self.view.endEditing(true)
都完成了相同的任务 - 从用户的视图中隐藏键盘并使正在使用它的任何文本字段散焦。我知道前者特定于特定字段,而后者包含整个视图,但除了想要针对特定文本字段之外,什么时候 preferred/recommended 优于另一个?
someTextField.resignFirstResponder()
resignFirstResponder()
非常适合在您确切知道哪个文本字段是第一响应者并且想要退出其第一响应者状态时使用。这可能比替代方案更有效,但如果您正在做一些事情,例如创建自定义控件,这可能很有意义。例如,也许您有一个文本字段,当按下“下一步”按钮时,您想摆脱键盘并显示一个日期选择器。在这里,我肯定会使用 resignFirstResponder()
self.view.endEditing(true)
我通常将此保留用于无论出于何种原因,无论当前正在发生什么,我都绝对需要清除键盘的情况。也许,我有一个滑盖菜单?就在它滑出之前,无论发生什么,键盘都应该消失,所以我会确保 everything 放弃其第一响应者状态。重要的是要注意 endEditing()
将查看整个子视图层次结构并确保第一响应者放弃其状态。如果您已经有对第一响应者的具体引用,这会比调用 resignFirstResponder()
效率低,但如果没有,它比找到该视图并让它辞职更容易。
没有这么严格的规定。
当您具有当前保持第一响应者状态的文本字段的引用时,您使用 resignFirstResponder
。当您没有参考资料或不确定时,endEditing
可以解决问题。
但是需要注意的是 endEditing
有一个我们偶尔会设置为 true
的布尔参数。通过将此参数设置为 true
,调用 endEditing
的视图将强制每个子文本字段放弃第一响应者状态,而不管它是否 return 编辑了 false
来自 textFieldShouldEndEditing
委托方法的值。相反,使用 false
调用 endEditing
只会要求(不强制)文本字段退出,尊重 textFieldShouldEndEditing
协议方法中的 return 值。
在 Swift 中,[someTextField].resignFirstResponder()
和 self.view.endEditing(true)
都完成了相同的任务 - 从用户的视图中隐藏键盘并使正在使用它的任何文本字段散焦。我知道前者特定于特定字段,而后者包含整个视图,但除了想要针对特定文本字段之外,什么时候 preferred/recommended 优于另一个?
someTextField.resignFirstResponder()
resignFirstResponder()
非常适合在您确切知道哪个文本字段是第一响应者并且想要退出其第一响应者状态时使用。这可能比替代方案更有效,但如果您正在做一些事情,例如创建自定义控件,这可能很有意义。例如,也许您有一个文本字段,当按下“下一步”按钮时,您想摆脱键盘并显示一个日期选择器。在这里,我肯定会使用 resignFirstResponder()
self.view.endEditing(true)
我通常将此保留用于无论出于何种原因,无论当前正在发生什么,我都绝对需要清除键盘的情况。也许,我有一个滑盖菜单?就在它滑出之前,无论发生什么,键盘都应该消失,所以我会确保 everything 放弃其第一响应者状态。重要的是要注意 endEditing()
将查看整个子视图层次结构并确保第一响应者放弃其状态。如果您已经有对第一响应者的具体引用,这会比调用 resignFirstResponder()
效率低,但如果没有,它比找到该视图并让它辞职更容易。
没有这么严格的规定。
当您具有当前保持第一响应者状态的文本字段的引用时,您使用 resignFirstResponder
。当您没有参考资料或不确定时,endEditing
可以解决问题。
但是需要注意的是 endEditing
有一个我们偶尔会设置为 true
的布尔参数。通过将此参数设置为 true
,调用 endEditing
的视图将强制每个子文本字段放弃第一响应者状态,而不管它是否 return 编辑了 false
来自 textFieldShouldEndEditing
委托方法的值。相反,使用 false
调用 endEditing
只会要求(不强制)文本字段退出,尊重 textFieldShouldEndEditing
协议方法中的 return 值。