Если вы используете модальный переход, он всегда будет активирован.Чтобы включить / отключить в зависимости от представленного контроллера представления, я бы добавил действие в контроллер представления, чтобы вручную открыть контроллер представления как модальный.Элемент меню должен быть подключен к действию (openModalViewController) с первым респондентом.
@IBAction func openModalViewController(_ sender: AnyObject) {
let storyboard = NSStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateController(withIdentifier: "MyViewController") as! NSViewController
presentAsModalWindow(viewController)
}
Учтите, что должен быть хотя бы один просмотр, способный получить первого респондента в main1 / main2, что пункт меню будетактивировать.Если это не так, вам придется реализовать acceptsFirstResponder
для соответствующего представления.
override var acceptsFirstResponder: Bool{
return true
}
Для реализации validateUserInterfaceItem
в этом случае не потребуется, только если вы хотите контролировать активацию / деактивациюзависит от дополнительного состояния, как в примере ниже.
extension ViewController: NSMenuItemValidation {
func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
if menuItem.action == #selector(delete(_:)) {
return tableView.selectedRow < 0 ? false : true
}
return true
}
}