连接文档型应用程序中的菜单项

14

我已经在这个主题上提出了几个问题,但实际上没有得到如何完成它的真正答案(它实际上获得了“荒漠之旅徽章”笑)。

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

比方说我想在MyDocument(主界面)中添加“加粗”按钮或“拼写检查”按钮(在菜单.xib下列在“格式 > 字体”等项中),我无法弄清如何做到这一点。

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

我尝试在MyDocument.Xib中添加字体管理器并以此连接,但是加粗按钮仅启用,而不能禁用。此外,通过字体管理器无法激活拼写检查等功能。

肯定有更好的方法来完成这个任务。

苹果公司的文档非常模糊。

1个回答

18
这正是IB中的First Responder对象用来连接操作的代理对象。向它发送的任何操作消息都将通过响应链传递到第一个接受它们的对象。对于基于文档的应用程序,响应链包括当前文档。因此,要将菜单项连接到您的文档:
  1. 如有必要,请将该操作添加到First Responder中。您可以从IB的检查器窗口完成此操作。
  2. 将该操作与First Responder连接,就像连接普通对象一样。
  3. 在您的文档中实现操作方法。
如果需要以编程方式向第一个响应者添加消息,则将对象的目标设置为nil

1
当我向我的Document.h文件中添加了一个 IBAction 后,我发现它立即出现在MainMenu.xib的第一个响应者的动作列表中。这对我帮助很大,谢谢! - mtmurdock
我不确定为什么,但正如@mtmurdock所说,即使IBAction由超类实现,我仍然需要定义自己的IBAction方法,然后从这里调用超类方法。这是针对NSPersistentDocument扩展的。 - Caspar Harmer
1
@CaspNZ,这些指令是在Xcode 4之前的,当IB是一个单独的应用程序时。现在它应该会自动显示出来。只需正常地覆盖该方法,您的版本将被调用,然后您可以调用超级实现。 - ughoavgfhw
特别感谢@mtmurdock提到了需要使用IBAction的部分。这一点使得答案更加完整。我已经在我的NSDocument类中实现了该方法,但是忽略了这个小细节。 - Wizard of Kneup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接