我对几个第一响应者点感到困惑:
- becomeFirstResponder
,系统是否先调用– canBecomeFirstResponder
?为什么?- becomeFirstResponder
和– canBecomeFirstResponder
都有?在什么情况下他们可以返回不同的值?– resignFirstResponder
时会发生什么? UIApplication
是立即成为第一响应者还是在响应者链中的某个点上抛出这个“令牌”?当我想要摆脱那个朝圣者代币时,我可以在- becomeFirstResponder
对象上调用UIApplication
吗?请有人解释一下,系统如何管理其第一响应者。当一些物体成为第一响应者时,在什么时候发生了什么,当第一响应者辞职时会发生什么。系统做什么电话......谢谢!
答案 0 :(得分:6)
becomeFirstResponder
的默认实现会调用canBecomeFirstResponder
。这是因为从canBecomeFirstResponder
返回NO的响应者不应该成为第一个响应者。becomeFirstResponder
将使接收者真正成为第一个响应者。 canBecomeFirstResponder
只是检查接收者是否愿意成为第一个响应者,而不实际改变任何东西。如果当前的第一响应者拒绝辞职,becomeFirstResponder
可能会失败。可能还有其他情况becomeFirstResponder
也可能失败。firstResponder
来判断,在这种情况下,系统不会指定任何特定的默认值。基本上,当某些事物想要成为第一响应者时,要求当前第一响应者(如果有的话)辞职,然后新对象成为第一响应者。这可能导致系统显示屏幕键盘或采取其他一些操作。当第一个响应者辞职时,这可能同样会导致系统隐藏屏幕键盘或采取其他行动。
当非触摸事件进入时,它首先被传递到UIWindow。 UIWindow将其提供给第一响应者。该文档似乎没有指定UIWindow是否尝试处理事件本身(并且如果它本身不处理它就像往常一样将其传递给UIApplication),或者如果没有第一响应者则忽略该事件。
有关详细信息,请参阅the documentation。