我想实现NSMenuItem
to触发某些功能(例如“运行计算”)。如何根据应用程序逻辑访问菜单项以启用/禁用项目?例如。文本的“剪切”功能仅在选择测试时作为菜单项启用。只有在给出某些标准时才能启用“运行计算”。谢谢!
您可能有一些实现runCalculation
的视图控制器或窗口控制器,如下所示:
class ViewController: NSViewController {
@IBAction func runCalculation(_ sender: Any?) {
print(1 + 1)
}
}
并且您已将“运行计算”菜单项的操作连接到控制器的runCalculation
方法。
要启用和禁用菜单项,请按照下列步骤操作:
NSMenu
)在IB中打开了“自动启用项目”属性,或者在代码中将autoenablesItems
设置为true。
NSUserInterfaceValidations
协议:
extension ViewController: NSUserInterfaceValidations {
func validateUserInterfaceItem(_ item: NSValidatedUserInterfaceItem) -> Bool {
// See step 3...
return true
}
}
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
}
}
}
例如,采用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
}