Доступ к пункту меню для отключения / включения - PullRequest
0 голосов
/ 25 февраля 2019

Я хотел бы реализовать NSMenuItem для запуска определенных функций (например, «Выполнить расчет»).Как получить доступ к элементам меню, чтобы включить / отключить элементы на основе логики приложения?Например, функция «вырезать» для текста активна только как пункт меню, когда выбран тест.«Выполнить расчет» следует включать только при наличии определенных критериев.Спасибо!

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Возможно, у вас есть контроллер представления или оконный контроллер, который реализует runCalculation, например:

class ViewController: NSViewController {

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

}

И вы подключили действие пункта меню «Выполнить расчет» к методу runCalculationконтроллер.

Чтобы включить и отключить пункт меню, выполните следующие действия:

  1. Убедитесь, что само меню «Калькулятор» (типа NSMenu) имеет «Свойство Auto Enables Items ”включено в 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
            }
        }
    }
    
0 голосов
/ 26 февраля 2019

Принять 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...