我正在用Swift编写一个针对macOS Sierra的应用程序。
我有一个我想要变灰的NSMenuItem(所以用户甚至不能选择它)。
我在故事板中将其父菜单AutoEnableItems设置为FALSE,并通过登录我的代码验证它仍然是假的。
当我将我的NSMenuItem的isEnabled属性设置为false时,它的作用是当我选择该菜单项时,我没有调用与菜单项关联的操作(这很好),但菜单仍然是可选的
我想要的是它变灰,显然不能被用户选择。
答案 0 :(得分:0)
根据文档,您正在做的事情听起来是正确的。
但是,我这样做的方法是在AppDelegate类中实现validateMenuItem
。这个方法有点烦人,因为它会被调用每个菜单项,菜单项作为参数传递。因此,您必须打开参数,看看它是否是您要禁用的菜单项,并返回false。
这里有一个Objective-C示例:https://developer.apple.com/documentation/objectivec/nsobject/1518160-validatemenuitem
Swift示例可能如下所示:
override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
switch menuItem.tag {
case MenuItemTags.SignOut:
return signOutEnabled()
case MenuItemTags.CheckForUpdates:
return updatesEnabled()
default:
return true
}
}
您可能已经阅读过此内容,但此处有许多详细信息:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/MenuList/Articles/EnablingMenuItems.html
然而,正如我所说,这篇文章似乎表明你正在尝试的是正确的,所以谁知道呢?我可以肯定地说我的方式有效。