尝试学习菜单处理的基础知识。我的测试应用程序的菜单栏有3个菜单 - 即“TestApp”,“文件”和“帮助”。我发现我可以完全删除这些菜单,只需调用say:
即可NSMenu* rootMenu = [NSApp mainMenu];
[rootMenu removeItemAtIndex:2];
但是,我只想暂时禁用它们(灰色它们)。请问有同样简单的方法吗?
答案 0 :(得分:7)
我可能误解了您的问题,但似乎您希望能够使用系统菜单栏显示的菜单的实际标题变灰(例如灰显“文件”菜单)。我不确定它是否可能,但它确实违反了Apple Human Interface Guidelines:
菜单标题未显示 即使所有菜单的命令都是 同时不可用(变暗)。 用户应该始终能够查看 菜单的内容,无论是否 目前可用。
因此,问题的真正解决方案是在应用程序处于某种状态时能够使某个菜单中的所有菜单项变灰。为此,implement the NSUserInterfaceValidations protocol。它只需要实现- (BOOL)validateUserInterfaceItem:
方法。通常,在实现此方法时,您只需检查要验证的用户界面项的选择器,如果应该启用则返回YES,否则返回NO(如果不应该这样)(将使菜单项变灰)。