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

Joe*_*son 18 first-responder ios

我知道第一个响应者对象是根据输入活动等接收回调信号,并且它会将其冒充链,直到找到愿意处理它的响应者.

但更正式的是,第一响应者的范围是什么?例如,它是应用程序范围内的响应者吗?似乎第一响应者只是说这个特定对象将收到交互通知.另一个响应者可以窃取第一响应者状态吗?

请向我解释或指导一些相关信息.我已经阅读了Apple对响应者的一般解释.我正在寻找一个更加内置的解释.

Rya*_*ger 21

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

响应者是一个可以响应事件并处理它们的对象.所有响应者对象都是最终从UIResponder(iOS)或NSResponder(OS X)继承的类的实例.

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

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

第一响应者层次结构

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

  1. 用户点击textField1.它现在是第一个响应者.
  2. 用户点击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
Run Code Online (Sandbox Code Playgroud)

对于其他读过这篇文章的人来说,还没有找到Apple的文档,一个好的起点是响应者层次结构解释,请点击此处:https: //developer.apple.com/library/ios/documentation/General/Conceptual/Devpedia- CocoaApp/Responder.html

我希望这有帮助!

  • @RuChernChong“onFocus”对于刚开始使用 iOS 的 Android 开发人员(即我)来说很有意义 (3认同)

mat*_*att 11

这是窗户的属性.窗口始终不超过一个第一响应者.任何UIResponder都可以通过发送来声明第一响应者状态becomeFirstResponder,这就是为什么您可以通过向其发送该消息来使UITextField"聚焦".

  • 这也是为什么警报视图可以在不打扰当前第一响应者的情况下窃取焦点的原因。UIAlertView 完全在另一个 UIWindow 中。 (2认同)