Как получить доступ к NSViewController из приложения делегата? - PullRequest
0 голосов
/ 08 сентября 2018

В моем приложении macOS есть пункты меню, которые также воспроизводятся в основном интерфейсе пользователя. Приложение состоит из главного окна с его делегатом и одного представления вместе с контроллером представления. В делегате приложения я фиксирую действие щелчка по пункту меню, затем мне нужно отправить это событие моему контроллеру представления, чтобы выполнить соответствующие действия, а также обновить основной интерфейс.

Вопрос в том, как получить доступ к моему контроллеру представления (NSViewController) из делегата приложения?

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

На самом деле вам не нужна ссылка на контроллер. Есть First Responder

  • Объявить IBActions
  • В Интерфейсном Разработчике соедините пункты меню с Первым Респондентом (красный куб) целевого объекта и выберите соответствующее действие.

Действие будет выполнено в первом объекте цепочки респондента, который реализует действие.

0 голосов
/ 08 сентября 2018

Если у вас есть window как IBOutlet, вы можете сделать

var rootViewController: MyViewController? {
    return window!.contentViewController as? MyViewController
}

func sendPressed(_ sender: Any?) {
   rootViewController?.sendPressed()
}

Если у вас нет переменной window, вы можете получить ее через

NSApplication.shared.orderedWindows.first!
...