如何使NSMenuItem变灰?

时间:2017-09-01 17:23:19

标签: swift macos menu nsmenu nsmenuitem

我正在用Swift编写一个针对macOS Sierra的应用程序。

我有一个我想要变灰的NSMenuItem(所以用户甚至不能选择它)。

我在故事板中将其父菜单AutoEnableItems设置为FALSE,并通过登录我的代码验证它仍然是假的。

当我将我的NSMenuItem的isEnabled属性设置为false时,它的作用是当我选择该菜单项时,我没有调用与菜单项关联的操作(这很好),但菜单仍然是可选的

我想要的是它变灰,显然不能被用户选择。

1 个答案:

答案 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

然而,正如我所说,这篇文章似乎表明你正在尝试的是正确的,所以谁知道呢?我可以肯定地说我的方式有效。