我对 iPhone 响应链感到困惑。具体来说,在iPhone事件处理指南中http://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/EventHandling/EventHandling.html http://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/EventHandling/EventHandling.html,我们有以下内容:
第一响应者是应用程序中的响应者对象(通常是 UIView 对象),它被指定为除触摸事件之外的事件的第一个接收者。
但UIView是UIResponder的子类。 UIResponder 类参考是这样说的:
- (BOOL)canBecomeFirstResponder
返回值
如果接收者可以成为第一响应者,则为“是”,否则为“否”。
讨论
默认返回NO。如果响应者对象从此方法返回 YES,则它成为第一响应者,并且可以接收触摸事件和操作消息。子类必须重写此方法才能成为第一响应者。
术语可能会令人困惑。不要将“第一响应者”视为“初始事件目标”,即作为第一响应者的对象成为所有事件的初始目标。在某些 API 中,这也称为“焦点”,尽管在 Apple API 中通常保留用于描述窗口。
在任何给定时间,应用程序中只有一个第一响应者/初始事件目标。只有单个对象/实例才能成为第一响应者/初始事件目标。类只能定义它们的实例是否有能力成为第一响应者/初始事件目标。如果有意义的话,类只需提供成为应用程序的第一响应者/初始事件目标的能力。例如,文本字段显然需要能够捕获事件,以便它可以使用这些事件来编辑自身。相比之下,静态标签不需要这样的功能。
特定类是否继承自 NSResonder 与该类(或该类的特定实例)是否将其自身设置为第一响应者/初始事件目标无关。这种能力仅来自个体对canBecomeFirstResponder
信息。同一实例可以在一组条件下拒绝成为第一响应者/初始事件目标,然后在条件发生变化时允许它成为第一响应者/初始事件目标。如果愿意的话,类当然可以硬连线状态。
换句话说,第一响应者/初始事件目标是特定实例在特定时间的状态。第一响应者/初始事件目标就像一个烫手山芋或在 UI 中从一个实例传递到另一个实例的令牌。有些班级根本拒绝抢这个烫手山芋。有些人总是这样做,有些人有时会抓住它,而另一些人则忽略它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)