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