访问菜单项以禁用/启用

问题描述 投票:0回答:2

我想实现NSMenuItemto触发某些功能(例如“运行计算”)。如何根据应用程序逻辑访问菜单项以启用/禁用项目?例如。文本的“剪切”功能仅在选择测试时作为菜单项启用。只有在给出某些标准时才能启用“运行计算”。谢谢!

enter image description here

swift xcode macos nsmenuitem
2个回答
4
投票

您可能有一些实现runCalculation的视图控制器或窗口控制器,如下所示:

class ViewController: NSViewController {

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

}

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

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

  1. 确保“计算器”菜单本身(类型为NSMenu)在IB中打开了“自动启用项目”属性,或者在代码中将autoenablesItems设置为true。 menu auto enables items checkbox
  2. 使您的控制器符合NSUserInterfaceValidations协议: extension ViewController: NSUserInterfaceValidations { func validateUserInterfaceItem(_ item: NSValidatedUserInterfaceItem) -> Bool { // See step 3... return true } }
  3. validateUserInterfaceItem,检查项目的action是否是runCalculation(_:)。如果是这样,当且仅当您想允许用户运行计算时返回true: 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 } } }

1
投票

例如,采用NSMenuItemValidation并实现委托方法validateMenuItem(_:)

func validateMenuItem(_ menuItem: NSMenuItem) -> Bool
{
   if menuItem.title == "Run Calculation" {
      // add the logic and `return true` if the menu item should be enabled otherwise `return false`
   }
   return true
}
© www.soinside.com 2019 - 2024. All rights reserved.