需要第一响应者说明

时间:2011-02-07 08:06:11

标签: objective-c cocoa macos interface-builder

我之前在这里提出了一个关于使用First Responder的问题 - 并在此得到了答复:

Trouble with First Responder

有人会介意给我一个“傻瓜”版本吗?作为Cocoa的新手,我真的不知道从哪种方法开始。我快速给出答案

扎克

2 个答案:

答案 0 :(得分:22)

First Responder具体为this

你所询问的是目标行动。你有一个UI对象(按钮,菜单项),你需要导致多个事情发生,但UI对象只发送一个动作。

因此解决方案:让该行动做多件事。

将UI对象挂钩到您在控制器对象中实现的操作方法(在您的情况下,文档中)。在该方法中,执行按钮需要执行的所有操作。

子类化解决方案基本上是相同的,除了不将UI对象挂钩到文档,你将它连接到字体管理器,但你也使字体管理器成为你创建的NSFontManager的子类的实例,而不是直接的NSFontManager的实例。在您的子类中,您重写addFontTrait:并在实现中添加其他行为。在该方法的开始或结束时,您发送[super addFontTrait:sender]以调用NSFontManager的实现,因此原始实现完成。

长段落,但实际上并没有那么多工作:不同之处只是制作子类并使实例成为该子类的实例。


之前您已经说过“Apple文档非常模糊”,但事实并非如此。恰好有很多,也许你没有看过正确的文件。

这些是您需要阅读的文档,从头到尾,按顺序:

编辑:此列表适用于Xcode 3.我在another answer发布了此列表的更新(适用于Xcode 4)版本。

  1. The Objective-C Programming Language
  2. The Memory Management Programming Guide for Cocoa
  3. The Cocoa Fundamentals Guide(解释目标行动等)
  4. Application Architecture Overview
  5. Resource Programming Guide
  6. Interface Builder User Guide
  7. Xcode 3指南:
    1. Xcode Project Management Guide
    2. Xcode Workspace Guide
    3. Xcode Build System Guide
    4. Xcode Debugging Guide
  8. Document-Based Applications Overview
  9. 还有Instruments User Guide,但不幸的是,一个 含糊不清 - 或者更准确地说,是不完整的。它省略了许多有用的信息,比如如何使用Instruments的Zombies模板来调试崩溃。这是一个高级概述,仅此而已。

    另外,将这些书签加入:

    这是很多阅读,但它会告诉你需要知道的一切,而且这个顺序大致就是你需要知道的顺序。

答案 1 :(得分:1)

另一个答案说你有两个选择:

首先:用您创建的动作替换动作,然后自己实现原始版本的功能。在这种情况下,只需调用NSFontManager的适当方法即可。也就是说,您将原始功能添加到您自己的方法实现中。这样,两个动作都会被执行。

第二:对实现原始功能的类进行子类化,并通过覆盖名为-addFontTrait的方法添加实现。这样,您的代码就会“并行”执行。 This question可能会帮助您找到正确的实施方案。

因此,重要的是您可以将原始功能添加到您的实现中,或者反过来。在这种情况下,我会尝试第一个。