8

在尝试学习菜单处理的基础知识。我的测试应用程序的菜单栏有 3 个菜单——即“TestApp”、“File”和“Help”。我发现我可以完全删除这些菜单,只需调用say:

NSMenu* rootMenu = [NSApp mainMenu];
[rootMenu removeItemAtIndex:2];

但是,我只想暂时禁用它们(将它们变灰)。请问有没有同样简单的方法可以做到这一点?

4

1 回答 1

7

我可能误解了您的问题,但您似乎希望能够使系统菜单栏出现的菜单的实际标题变灰(例如使“文件”菜单变灰)。我不确定这是否可能,但它肯定违反了Apple 人机界面指南

即使所有菜单的命令同时不可用(变暗),菜单的标题也不会变暗。用户应该始终能够查看菜单的内容,无论它们当前是否可用。

因此,问题的真正解决方案是,当您的应用程序处于某种状态时,能够将某个菜单内的所有菜单项灰显。为此,请实现 NSUserInterfaceValidations 协议。它只需要实现该- (BOOL)validateUserInterfaceItem:方法。通常,在实现此方法时,您只需检查正在验证的用户界面项的选择器,如果应启用则返回 YES,否则返回 NO(这将使菜单项变灰)。

于 2010-01-18T15:12:56.183 回答