iOS中第一响应者的正式定义是什么?

iOS中第一响应者的正式定义是什么?,ios,first-responder,Ios,First Responder,我知道第一响应者对象是根据输入活动等接收回调信号的对象,它将在链上冒泡,直到找到愿意处理它的响应者 但更正式地说,第一响应者的范围是什么?例如,它是应用程序范围的响应程序吗?作为第一响应者,似乎只是说这个特定对象将收到交互通知。其他响应者能否窃取第一响应者状态 请解释或指导我一些相关信息。我读过苹果公司关于什么是响应者的一般解释。我正在寻找一个更为详细的解释。这是窗口的属性。窗口始终不超过一个第一响应者。任何UIResponder都可以通过被发送成为第一响应者来声明第一响应者状态,这就是为什么您

我知道第一响应者对象是根据输入活动等接收回调信号的对象,它将在链上冒泡,直到找到愿意处理它的响应者

但更正式地说,第一响应者的范围是什么?例如,它是应用程序范围的响应程序吗?作为第一响应者,似乎只是说这个特定对象将收到交互通知。其他响应者能否窃取第一响应者状态


请解释或指导我一些相关信息。我读过苹果公司关于什么是响应者的一般解释。我正在寻找一个更为详细的解释。

这是窗口的属性。窗口始终不超过一个第一响应者。任何UIResponder都可以通过被发送成为第一响应者来声明第一响应者状态,这就是为什么您可以通过向UIExtField发送该消息使其获得“焦点”。

iOS中第一响应者的范围由视图层次结构决定。记住,响应者是响应者层次结构的一部分,由苹果的文档定义:

响应者是可以响应事件并处理它们的对象。所有响应程序对象都是最终从UIResponder(iOS)或nsrresponder(OSX)继承的类的实例

实际上,所有响应者都是潜在响应者链的一部分,这些潜在响应者一直通向应用程序本身。这意味着响应程序的范围取决于要获得能够处理响应的对象,您必须走多远的链。如果第一个响应者是UI元素,例如UITextField,则您的范围与该响应者的范围相关联

在此图像中,iOS第一响应程序层次结构显示在左侧(OS X显示在右侧):

回答问题的第二部分,是的,如果用户与元素交互,对象可以“窃取”第一响应者状态,例如:

  • 用户单击textField1。它现在是第一反应者
  • 用户单击textField2。它已从textField1接管第一响应者状态
  • …您可以通过某些功能向他们授予第一响应者状态:

    [textField3 becomeFirstResponder]; //This is now the first responder
    [textField4 becomeFirstResponder]; //Now textField4 has 'stolen' first responder status
    [textField4 resignFirstResponder]; //The text field has resigned its first responder status to the next level up
    
    对于阅读本文的其他人来说,如果他们没有查阅苹果的文档,那么一个很好的起点就是响应者层次结构解释,如下所示:


    我希望这有帮助

    在窗口对象之前请记住一个在处理之前

    当应用程序对象获取touch对象或其他对象时,它将转换为其事件对象并将其分派给窗口对象。窗口对象发送到最合适的对象来处理事件(响应器链)。所以窗口实例的属性first responder实例已不再存在

    weak var firstResponder: NSResponder? { get }
    

    这正是我想要的答案。例如,如果另一个组件成为第一响应者,它将为自己窃取焦点?正确,如果它成功成为第一响应者。(它可能试图成为第一响应者,但失败了。)只有一个。阅读我的书中的这一部分可能会有帮助:这也是为什么警报视图可以在不干扰当前第一响应者的情况下窃取焦点的原因。UIAlertView完全位于另一个UIWindow中。谢谢您的回答。为了进一步澄清,当一个元素退出第一响应者状态时,这是否意味着之前成为第一响应者的最后一个元素再次成为第一响应者?事实并非如此。当您调用
    resignFirstResponder
    时,这仅仅意味着没有当前指定的响应者。您没有任何时候都有第一响应者。@Ruchernchung的“onFocus”对于开始使用iOS的Android开发人员(即我)来说是有意义的