我想实现NSMenuItem
来触发某些功能(例如“运行计算”)。如何根据应用程序逻辑访问菜单项以启用/禁用菜单项?例如。文本的“剪切”功能仅在选择测试时才作为菜单项启用。仅在给出某些条件时才应启用“运行计算”。
谢谢!
答案 0 :(得分:3)
您可能有一些实现runCalculation
的视图控制器或窗口控制器,如下所示:
class ViewController: NSViewController {
@IBAction func runCalculation(_ sender: Any?) {
print(1 + 1)
}
}
您已将“运行计算”菜单项的操作连接到控制器的runCalculation
方法。
要启用和禁用菜单项,请按照下列步骤操作:
确保“计算器”菜单本身(类型为NSMenu
)具有在IB中启用的“自动启用项目”属性,或者在代码中将autoenablesItems
设置为true。 / p>
使您的控制器符合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
}
}
}
答案 1 :(得分: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
}