【问题标题】:Connecting Menu Items in Document Based Applications在基于文档的应用程序中连接菜单项
【发布时间】:2011-06-21 00:46:43
【问题描述】:

我已经就这个主题提出了几个问题,但还没有真正得到关于如何做到这一点的真正答案(它实际上收到了“风滚草徽章”哈哈)。

我有一个基于文档的应用程序(意味着 Menu.Xib 与 MyDocument.Xib 是分开的)。

假设我想向 MyDocument(主界面)添加一个“粗体”按钮或一个检查拼写按钮(Menu.xib 中列出的项目(在格式 > 字体等下)。我不知道该怎么做这个。

任何帮助将不胜感激(如果它有效,我会立即奖励答案,这已经困扰了我几个星期了)。

我尝试将字体管理器添加到 MyDocument.Xib 并以这种方式连接,但粗体按钮仅启用,不会禁用。另外,拼写检查等无法通过字体管理器激活。

必须有更好的方法来做到这一点。

Apple 文档非常模糊。

【问题讨论】:

    标签: objective-c cocoa nsmenuitem


    【解决方案1】:

    这正是 IB 中的 First Responder 对象的用途。它是连接动作的代理对象。发送给它的任何动作消息都将沿着响应者链传递给第一个接受它们的对象。对于基于文档的应用程序,响应者链包括当前文档。因此,要将菜单项连接到您的文档:

    1. 如果需要,将操作添加到 First Responder。您可以从 IB 的检查器窗口执行此操作。
    2. 将操作连接到 First Responder,就好像它是一个普通对象一样。
    3. 在您的文档中实现操作方法。

    如果您需要以编程方式向第一响应者添加消息,请将对象的目标设置为 nil

    【讨论】:

    • 当我将IBAction 添加到我的 Document.h 时,我发现它立即出现在 MainMenu.xib 的第一响应者的操作列表中。这帮助很大,谢谢!
    • 我不知道为什么,但正如@mtmurdock 所说,即使 IBAction 是由超类实现的,我也需要定义我的 OWN IBAction 方法,然后从这里调用超类方法.这是一个 NSPersistentDocument 扩展。
    • @CaspNZ 这些说明是 Xcode 4 之前的版本,当时 IB 是一个单独的应用程序。它现在应该自动显示。只需正常覆盖该方法,您的版本就会被调用,然后您可以调用超级实现。
    • 特别感谢@mtmurdock 提到IBAction 的需求。那部分会使答案完整。我确实在我的 NSDocument 类中实现了该方法,但忽略了这个小细节。
    猜你喜欢
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2020-10-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    相关资源
    最近更新 更多