Objective c 了解第一响应者的系统逻辑

Objective c 了解第一响应者的系统逻辑,objective-c,ios,cocoa-touch,first-responder,uiresponder,Objective C,Ios,Cocoa Touch,First Responder,Uiresponder,我对几个第一反应者的观点感到困惑: 如果我调用-becomeFirstResponder,系统调用-canBecomeFirstResponder?为什么? 为什么既有-成为第一响应者又有-可以成为第一响应者?在什么情况下,它们可以返回不同的值 应用程序是否每次都必须有第一响应者?如果是这样,当我调用某个对象的–resignFirstResponder时会发生什么?UIApplication是立即成为第一响应者,还是在响应者链中的某个点上抛出此“令牌”?当我想要清除朝圣者令牌时,我可以在UIAp

我对几个第一反应者的观点感到困惑:

  • 如果我调用
    -becomeFirstResponder
    ,系统调用
    -canBecomeFirstResponder
    ?为什么?
  • 为什么既有
    -成为第一响应者
    又有
    -可以成为第一响应者
    ?在什么情况下,它们可以返回不同的值
  • 应用程序是否每次都必须有第一响应者?如果是这样,当我调用某个对象的
    –resignFirstResponder
    时会发生什么?
    UIApplication
    是立即成为第一响应者,还是在响应者链中的某个点上抛出此“令牌”?当我想要清除朝圣者令牌时,我可以在
    UIApplication
    对象上调用
    -becomeFirstResponder
  • 请有人给我解释一下,系统是如何管理它的第一响应者的。当某个对象成为第一响应者时,引擎盖下发生了什么,当第一响应者辞职时发生了什么。系统做什么调用。。。谢谢大家!

  • becomeFirstResponder
    的默认实现确实调用了
    canBecomeFirstResponder
    。这是因为从
    返回NO的响应者可以成为firstresponder
    ,而不应该成为第一响应者
  • becomeFirstResponder
    如果成功,将使接收者成为第一响应者
    canBecomeFirstResponder
    只需检查接收者是否愿意成为第一响应者,而无需实际更改任何内容。如果当前第一响应者拒绝辞职,
    becomeFirstResponder
    可能会失败。在其他情况下,
    成为第一响应者也可能失败
  • 代码中不必有任何具有第一响应者状态的内容。根据专用UIResponder方法
    firstResponder
    ,在这种情况下,系统不会指定任何特定的默认值
  • 基本上,当某个对象想要成为第一响应者时,会要求当前第一响应者(如果有的话)辞职,然后新对象成为第一响应者。这可能会导致系统显示屏幕键盘或执行其他操作。当第一响应者辞职时,这同样可能导致系统隐藏屏幕键盘或采取其他一些操作

    当一个非接触事件进入时,它首先被传送到UIWindow。UIWindow将其发送给第一响应者。文档似乎没有指定UIWindow是否尝试处理事件本身(如果UIWindow不处理事件本身,则像往常一样将其传递给UIApplication),或者如果没有第一响应程序,则忽略事件

    有关详细信息,请参阅