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

我明白,第一个响应者对象是根据input活动等接收callback信号,并且它会把它放在链上,直到find愿意处理它的响应者。

但更正式地说,第一响应者的范围是什么? 例如,它是一个应用程序的响应者? 看起来是第一响应者只是简单的说这个特定对象会收到交互通知。 另一个回应者是否可以抢先抢救?

请解释或指导我一些有关的信息。 我已经读过苹果关于响应者的一般解释。 我正在寻找一个更有意义的解释。

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

响应者是可以响应事件并处理事件的对象。 所有响应者对象都是最终从UIResponder(iOS)或NSResponder(OS X)inheritance的类的实例。

实际上,所有响应者都是潜在响应者链中的一部分,一直引导到应用程序本身。 这意味着响应者的范围取决于你为了获得一个能够处理响应的对象而必须走多远。 如果第一个响应者是一个UI元素,例如UITextField,那么您的范围就与该响应者的范围相关联。

在这张图片中,iOS的第一个响应者层次显示在左边(OS X在右边):

第一响应者层次

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

  1. 用户点击textField1。 现在是第一响应者。
  2. 用户点击textField2。 它已经从textField1中接pipe了第一个响应者状态。

…并且你可以赋予他们某些function的第一响应者状态:

[textField3 becomeFirstResponder]; //This is now the first responder [textField4 becomeFirstResponder]; //Now textField2 has 'stolen' first responder status [textField4 resignFirstResponder]; //The text field has resigned its first responder status to the next level up 

对于其他读者来说,没有在这方面打上苹果的文档,一个好的起点是在这里find的Responder层次结构解释: https : //developer.apple.com/library/ios/documentation/General/Conceptual/Devpedia- CocoaApp / Responder.html

我希望这有帮助!

这是窗户的一个属性。 窗口始终不超过一个第一响应者。 任何UIResponder可以通过发送becomeFirstResponder来声明第一个响应者状态,这就是为什么你可以通过发送该消息来让UITextField获得“焦点”的原因。