【问题标题】:iPhone first respondersiPhone 急救人员
【发布时间】:2010-04-10 03:40:57
【问题描述】:

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

第一响应者是应用程序中的响应者对象(通常是 UIView 对象),它被指定为触摸事件以外的事件的第一个接收者。

但 UIView 是 UIResponder 的子类。 UIResponder 类参考说明了这一点:

- (BOOL)canBecomeFirstResponder

返回值

如果接收者可以成为第一响应者,则为是,否则为否。 讨论

默认返回 NO。如果响应者对象从此方法返回 YES,则它成为第一响应者并可以接收触摸事件和动作消息。子类必须重写此方法才能成为第一响应者。

我对明显的矛盾感到困惑。谁能帮我解决一下?

不管怎样,我确实设置了一个简单的基于视图的应用程序,并在其视图上调用 canBecomeFirstResponder 和 isFirstResponder。两者都返回 NO。

【问题讨论】:

    标签: iphone first-responder


    【解决方案1】:

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

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

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

    换句话说,first-responder/initial-event-target 是特定实例在特定时间的状态。第一响应者/初始事件目标就像烫手山芋或令牌,在 UI 中从一个实例传递到另一个实例。有些班级根本拒绝抢夺烫手山芋。有些人总是这样做,有些人有时会抓住它,而另一些人则忽略它。

    【讨论】:

      【解决方案2】:

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

      一些 UIView 子类(如 UITextView)能够成为第一响应者,您也可以编写自己的 UIView 子类来这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多