如何从app delegate访问NSViewController?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从app delegate访问NSViewController?相关的知识,希望对你有一定的参考价值。

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

问题是如何从app delegate访问我的视图控制器(NSViewController)?

答案

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

  • 宣布IBActions
  • 在Interface Builder中,将菜单项连接到目标对象的First Responder(红色多维数据集),然后选择相应的操作。

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

另一答案

如果你有window作为IBOutlet你可以做

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

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

如果你没有window变量,你可以通过它

NSApplication.shared.orderedWindows.first!

以上是关于如何从app delegate访问NSViewController?的主要内容,如果未能解决你的问题,请参考以下文章

如何从二进制访问 App Delegate? [关闭]

如何从其他类(NSViewController 的子类)获取主窗口(App Delegate)?

iOS 如何告诉 App Delegate 从当前视图呈现新视图

如何从我的视图控制器引用我的 App Delegate 中的 managedObjectContext?

设置 App Delegate 以管理数据

如何从另一个对象访问我的 Application Delegate 的窗口访问器方法?