繁体   English   中英

iPhone第一响应者

[英]iPhone first responders

我对iPhone响应链感到困惑。 具体来说,在iPhone事件处理指南http://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/EventHandling/EventHandling.html中 ,我们有以下内容:

但UIView是UIResponder的子类。 UIResponder类引用说:

- (BOOL)canBecomeFirstResponder

我对这个明显的矛盾感到困惑。 任何人都可以为我清理它吗?

为了它的价值,我确实设置了一个简单的基于视图的应用程序,并在其视图上调用canBecomeFirstResponder和isFirstResponder。 两人都退不了。

命名法可能令人困惑。 而不是“第一响应者”将其视为“初始事件目标”,即作为第一响应者的对象成为所有事件的初始目标。 在某些API中,这也称为“焦点”,尽管在Apple API中通常用于描述窗口。

在任何给定时间,应用程序中只有一个第一响应者/初始事件目标。 只有单个对象/实例才能成为第一响应者/初始事件目标。 类只能定义它们的实例是否有能力成为第一响应者/初始事件目标。 如果有意义的话,类只需要提供成为应用程序的第一响应者/初始事件目标的能力。 例如,文本字段显然需要能够捕获事件,以便它可以使用这些事件来编辑自身。 相比之下,静态标签不需要这样的能力。

特定类是否继承自NSResonder与类(或类的特定实例)是否将其自身设置为第一响应者/初始事件目标无关。 该能力仅来自实例对canBecomeFirstResponder消息的响应。 在一组条件下,同一实例可以拒绝成为第一响应者/初始事件目标,然后在条件发生变化时允许它。 如果他们愿意,课程当然可以硬连线。

换句话说,第一响应者/初始事件目标是特定时间的特定实例的状态。 第一响应者/初始事件目标就像是烫手山芋或在UI中从实例切换到实例的令牌。 有些班级拒绝抓住烫手山芋。 有些人总是这样做,而其他人有时会抓住它而忽略其他人。

这意味着基本的UIView无法成为第一响应者 - 它不会对动作事件,编辑菜单消息等做任何事情。

一些UIView子类(比如UITextView)能够成为第一个响应者,你也可以编写自己的UIView子类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM