访问 Disable/Enable 的菜单项

Access Menu Item to Disable/Enable

我想实现 NSMenuItem 以触发某些功能(例如 "Run Calculation")。如何访问菜单项以便 enable/disable 基于应用程序逻辑的项目?例如。文本的 "cut" 功能仅在选择测试时作为菜单项启用。 "Run Calculation" 只应在满足特定条件时启用。 谢谢!

您可能有一些视图控制器或 window 控制器实现了 runCalculation,像这样:

class ViewController: NSViewController {

    @IBAction func runCalculation(_ sender: Any?) {
        print(1 + 1)
    }

}

并且您已将“运行 计算”菜单项的操作连接到控制器的 runCalculation 方法。

要启用和禁用菜单项,请按照下列步骤操作:

  1. 确保“计算器”菜单本身(NSMenu 类型)在 IB 中打开了“自动启用项目”属性,或者 autoenablesItems 在代码中设置为 true。

  2. 使您的控制器符合 NSUserInterfaceValidations 协议:

    extension ViewController: NSUserInterfaceValidations {
        func validateUserInterfaceItem(_ item: NSValidatedUserInterfaceItem) -> Bool {
            // See step 3...
            return true
        }
    }
    
  3. validateUserInterfaceItem中,检查项目的action是否为runCalculation(_:)。如果是这样,当且仅当您希望允许用户 运行 计算时 return 为真:

    extension ViewController: NSUserInterfaceValidations {
        func validateUserInterfaceItem(_ item: NSValidatedUserInterfaceItem) -> Bool {
            switch item.action {
    
            case #selector(runCalculation(_:))?:
                // Put your real test here.
                return !textField.stringValue.isEmpty
    
            default: return true
            }
        }
    }