【问题标题】:How do I change the main menu in Cocoa?如何更改 Cocoa 中的主菜单?
【发布时间】:2008-12-12 15:54:35
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: objective-c macos cocoa nsmenu


    【解决方案1】:

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

    【讨论】:

    • 我也想过这个问题,但它增加了在应用程序之间共享数据的复杂性。它有点像 XCode/Interface Builder,它们应该是单独的应用程序还是同一个应用程序。两种方式都可以进行论证。
    【解决方案2】:

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

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

    【讨论】:

    • 如何获取菜单?我每次都需要从笔尖加载它吗?你有关于交换子菜单的观点,也许这会更容易。我会调查的。
    • 我将为 Window1.nib 和 Window2.nib 创建两个不同的 NSWindowController 子类。您可以创建一个 IBOutlet 实例变量来为每个笔尖保留对菜单的引用。 NSWindowController 上的文档将更详细地解释设计,但如果您有其他问题,请告诉我。
    • 不要这样做,这是不好的做法-1
    猜你喜欢
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    相关资源
    最近更新 更多