【问题标题】:Disable/enable NSMenu item禁用/启用 NSMenu 项
【发布时间】:2021-05-13 03:43:18
【问题描述】:

我创建了一个菜单栏应用程序,一个使用 Interface Builder 的 NSMenu 对象(遵循this 教程)。菜单有两个项目:

开始突击队

停止突击队

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

单击“开始突击队”时,我希望禁用该项目并启用“停止突击队”。当单击“停止突击队”时,反之亦然。

【问题讨论】:

  • Swift 提供了 setEnabled 属性,可以在您尝试启用或禁用的 NSMenuItem 上使用
  • @Mukul更多谢谢! @IBOutlet weak var startMenuItem: NSMenuItem!startMenuItem.isEnabled = false/true 成功了。
  • 将其添加为答案。相应地标记它。

标签: swift xcode macos


【解决方案1】:

Swift 提供了 setEnabled 属性,可用于您尝试启用或禁用的 NSMenuItem。

您可以执行以下操作:

@IBOutlet weak var startMenuItem: NSMenuItem! 

startMenuItem.isEnabled = false or true

【讨论】:

  • 嗨,有人把这个放在哪里?进入 ContentView.swift 或 AppDelegate.swift?
【解决方案2】:

你可以试试下面的代码:

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

【讨论】:

    【解决方案3】:

    为实例声明一个 BOOL 值

    BOOL isActive 
    
    if(isActive)
    {
       //show menu
    }
    else
    {
       //hide your menu
    }
    

    当您的视图关闭时也使 BOOL 为真

    【讨论】:

      【解决方案4】:

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

      要让它在选择时改变,在调用菜单项的IBAction 中,可能在您的NSWindowController 中,执行以下操作:

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

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

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

      代码未经测试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-24
        • 1970-01-01
        • 2012-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多