Я хотел бы реализовать NSMenuItem
для запуска определенных функций (например, «Выполнить расчет»). Как мне получить доступ к элементам меню, чтобы включать/отключать элементы на основе логики приложения? Например. функция «вырезать» для текста доступна только в качестве пункта меню, когда выбран тест. «Выполнить расчет» следует активировать только при задании определенных критериев. Спасибо!
Доступ к пункту меню для отключения/включения
Ответы (1)
Вероятно, у вас есть какой-нибудь контроллер представления или оконный контроллер, который реализует 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 } } }
person
rob mayoff
schedule
25.02.2019
Большое спасибо за подробности. Первый раз имею дело с NSMenu. Вы мне очень помогли!
- person JFS; 26.02.2019
NSMenuItem
соответствуетNSValidatedUserInterfaceItem
, который работает с протоколомNSUserInterfaceValidations
. Реализоватьfunc validateUserInterfaceItem(_ item: NSValidatedUserInterfaceItem) -> Bool
. См. Пользователь Проверка интерфейса. - person Willeke   schedule 26.02.2019