禁用/启用NSMenu项

时间:2018-03-15 08:51:12

标签: swift xcode macos

我已经使用Interface Builder创建了一个菜单栏应用程序,一个NSMenu对象(在this教程之后)。菜单有两个项目:

启动突击队

停止突击队

如何在点击菜单项时禁用/启用菜单项?我已设置已停用"自动启用项目"我可以手动启用/禁用“属性”检查器中的项目,但是如何在调用它们的函数时实现相同的功能?

当"开始突击队"单击我希望该项目禁用和"停止突击队"启用。而另一种方式是"停止突击队"点击。

4 个答案:

答案 0 :(得分:1)

Swift提供了 setEnabled 属性,可以在您尝试启用或禁用的NSMenuItem上使用。

您可以执行以下操作:

@IBOutlet weak var startMenuItem: NSMenuItem! 

startMenuItem.isEnabled = false or true

答案 1 :(得分:0)

声明实例的BOOL值

BOOL isActive 

if(isActive)
{
   //show menu
}
else
{
   //hide your menu
}
当您的视图解除

时,

也会使BOOL成立

答案 2 :(得分:0)

您可以尝试以下代码:

let menu = NSMenu();
menu.autoenablesItems = false

答案 3 :(得分:0)

正如其他人所说,isEnabled 有一个 NSMenuItem 属性。还需要在 Xcode 的 Attributes Inspector 中或通过代码取消选中该菜单或子菜单的 Auto Enables Items,以使设置生效。

enter image description here

要使其在选择时发生变化,请在调用菜单项的 IBAction 中(可能在您的 NSWindowController 中)执行如下操作:

@IBAction private func myMenuAction(sender: NSMenuItem) {
     sender.isEnabled = false 
}

之后您将无法再选择菜单项。我假设您在其他地方重新启用它:

if let appDelegate = NSApplication.shared.delegate as? AppDelegate {
    appDelegate.myMenuItem.isEnabled = true
}

代码未经测试。