Ios 辞职FirstResponder vs.因键盘解雇而终止
在Swift中,Ios 辞职FirstResponder vs.因键盘解雇而终止,ios,swift,uitextfield,Ios,Swift,Uitextfield,在Swift中,[someTextField].resignFirstResponder()和self.view.endEditing(true)都完成了相同的任务—将键盘隐藏在用户的视图之外,并对正在使用它的任何文本字段取消聚焦。我知道前者是特定于某个字段的,而后者包含整个视图,但除了希望针对某个特定的文本字段外,什么时候一个字段比另一个更可取/推荐?someTextField.resignFirstResponder() resignFirstResponder()可以在您确切知道哪个文本字
[someTextField].resignFirstResponder()
和self.view.endEditing(true)
都完成了相同的任务—将键盘隐藏在用户的视图之外,并对正在使用它的任何文本字段取消聚焦。我知道前者是特定于某个字段的,而后者包含整个视图,但除了希望针对某个特定的文本字段外,什么时候一个字段比另一个更可取/推荐?someTextField.resignFirstResponder()
resignFirstResponder()
可以在您确切知道哪个文本字段是第一个响应者并且希望退出其第一个响应者状态时使用。这可能比另一种方法稍微有效一些,但是如果您正在做一些事情,例如创建自定义控件,那么这将非常有意义。例如,您可能有一个文本字段,当按下“下一步”按钮时,您希望摆脱键盘并显示一个日期选择器。在这里,我肯定会使用resignFirstResponder()
self.view.endEditing(true)
我通常会保留这一功能,以备无论出于何种原因,无论当前正在发生什么,我都绝对需要清除键盘。也许,我有一张幻灯片在菜单上?就在这个幻灯片出来之前,不管发生什么,键盘都应该离开,所以我会确保所有东西都退出其第一响应者状态。需要注意的是,
endEditing()
将查看子视图的整个层次结构,并确保第一响应者退出其状态。如果您已经有了对第一响应者的具体引用,那么调用resignFirstResponder()
会降低效率,但如果没有,则比找到该视图并让其退出要容易。没有这样严格的规则
当您有当前保持first responder状态的文本字段的引用时,可以使用resignFirstResponder
。当您没有参考资料或对此不确定时,endEditing
会起作用
但是,有一点应该注意,
endEditing
有一个布尔参数,我们偶尔会将其设置为true
。通过将此参数设置为true
调用了endEditing
的视图,将强制每个子文本字段退出第一响应者状态,而不管它是否从textfieldshouldenediting
委托方法返回了false
值。相反,使用false
调用endEditing
只会要求(而不是强制)文本字段退出,这与textfieldshouldenediting
协议方法的返回值有关。我不知道使用其中一种方法的具体情况。我想说的是,如果您有对文本字段的引用,您应该使用resignFirstResponder
;否则,在视图上调用endEditing
完全可以。请随意纠正我:)这是一个非常有趣的问题。我看不出有任何理由使用resignFirstResponder.
我相信他们将来会反对resignFirstResponder.
。(关于效率方面,你说的是一些项目,这是不相关的……如果出于某种原因,你碰巧想要,你可以只对一个项目调用endEditing
。)啊,我想知道的是,是否有任何潜在的差异并不明显。谢谢你的帮助!实际上,作为您答案的后续…在第一响应者可能未知的情况下,是否有一个函数可以找出当前有焦点的对象,然后将该对象的名称提供给resignFirstResponder()
?如果可能的话,它似乎比第二种方法更有效。如果您不知道对象,那么调用endEditing
将比尝试找出哪个对象是第一响应者更有效,只需调用resignFirstResponder
。@nhgrif我们可以使用UIView的resignFirstResponder()
。这意味着什么?如果我有多个文本字段,如:firstName、LastName、Address等,然后在最后我有一个submit
按钮,那么执行self.view.endEditing
会是一个更好的选择。明白了,这是一种我不知道的方法……我猜它会用于文本验证或其他错误处理?