如何更改Cocoa中的主菜单?

时间:2008-12-12 15:54:36

标签: objective-c macos cocoa nsmenu

我有一个带有两种类型窗口的可可应用程序,每种窗口都需要显示不同的主菜单。

在我的MainMenu.xib中,我有默认的MainMenu。在Window1.xib中我有Window1,在Window2.xib中我有Window2,它是MainMenu。

当我打开第一个窗口时,我有默认菜单,当我打开Window2时,我会看到它的菜单。

然而,当我切换回Window1时,我仍然看到Window2的菜单。如何使显示的菜单跟随关键窗口?

2 个答案:

答案 0 :(得分:12)

通常,您不应每次都替换整个主菜单。它更符合人机界面指南,只是禁用任何不适用于当前窗口的菜单项。如果你真的应该在菜单栏中有一套完全不同的菜单,也许你应该将应用程序的那一部分拆分成一个单独的应用程序。

答案 1 :(得分:5)

NSApplication有一个方法- (void)setMainMenu:(NSMenu *)aMenu。您可以通过实现- (void)windowDidBecomeKey:(NSNotification *)notification将参考传递给相应窗口控制器中的正确菜单。

请记住,只更改子菜单而不是交换整个主菜单可能更容易,因为您不必维护应用程序,帮助和其他菜单之间不会发生变化的两个不同副本两个窗口。