在我的macOS应用程序中,我有菜单项,它们也在主UI中复制。应用程序由主窗口及其委托和单个视图及其视图控制器组成。在app delegate我捕获菜单项单击操作,然后我需要将此事件发送到我的视图控制器,以便采取适当的操作并更新主UI。
问题是如何从app delegate访问我的视图控制器(NSViewController
)?
实际上,您不需要对控制器的引用。有First Responder
IBActions
该操作将在响应器链的第一个对象中执行,该对象实现该操作。
如果你有window
作为IBOutlet
你可以做
var rootViewController: MyViewController? {
return window!.contentViewController as? MyViewController
}
func sendPressed(_ sender: Any?) {
rootViewController?.sendPressed()
}
如果你没有window
变量,你可以通过它
NSApplication.shared.orderedWindows.first!