如何从应用程序委托访问NSViewController?

时间:2018-09-08 11:28:20

标签: swift macos appdelegate nsviewcontroller

在我的macOS应用程序中,我有菜单项,这些菜单项也可以在主UI中复制。应用程序由主窗口及其委托和单个视图以及其视图控制器组成。在应用程序委托中,我捕获菜单项的click操作,然后需要将此事件发送到我的视图控制器,以便采取适当的操作并更新主UI。

问题是如何从应用程序委托访问我的视图控制器(NSViewController)?

2 个答案:

答案 0 :(得分:1)

如果您将window作为IBOutlet,则可以

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

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

如果您没有window变量,则可以通过

NSApplication.shared.orderedWindows.first!

答案 1 :(得分:1)

实际上,您不需要引用控制器。有First Responder

  • 声明IBActions
  • 在Interface Builder中,将菜单项连接到目标对象的“第一响应者”(红色立方体),然后选择适当的操作。

该操作将在实现该操作的响应者链的第一个对象中执行。