在尝试学习菜单处理的基础知识。我的测试应用程序的菜单栏有 3 个菜单——即“TestApp”、“File”和“Help”。我发现我可以完全删除这些菜单,只需调用say:
NSMenu* rootMenu = [NSApp mainMenu];
[rootMenu removeItemAtIndex:2];
但是,我只想暂时禁用它们(将它们变灰)。请问有没有同样简单的方法可以做到这一点?
在尝试学习菜单处理的基础知识。我的测试应用程序的菜单栏有 3 个菜单——即“TestApp”、“File”和“Help”。我发现我可以完全删除这些菜单,只需调用say:
NSMenu* rootMenu = [NSApp mainMenu];
[rootMenu removeItemAtIndex:2];
但是,我只想暂时禁用它们(将它们变灰)。请问有没有同样简单的方法可以做到这一点?
我可能误解了您的问题,但您似乎希望能够使系统菜单栏出现的菜单的实际标题变灰(例如使“文件”菜单变灰)。我不确定这是否可能,但它肯定违反了Apple 人机界面指南:
即使所有菜单的命令同时不可用(变暗),菜单的标题也不会变暗。用户应该始终能够查看菜单的内容,无论它们当前是否可用。
因此,问题的真正解决方案是,当您的应用程序处于某种状态时,能够将某个菜单内的所有菜单项灰显。为此,请实现 NSUserInterfaceValidations 协议。它只需要实现该- (BOOL)validateUserInterfaceItem:
方法。通常,在实现此方法时,您只需检查正在验证的用户界面项的选择器,如果应启用则返回 YES,否则返回 NO(这将使菜单项变灰)。