如何将动作从 NSToolbar 项目发送到 TabViews 的第一响应者
How to send action from NSToolbar item to First Responder of TabViews
我希望我的 Mac 应用程序的 NSToolbar 项触发第一响应者对象的操作。我有一个具有以下故事板布局的应用程序:
如您所见,window 的工具栏中有一个按钮(测试操作)。它连接到第一响应者对象的动作函数。该功能本身是在 TabView 的第一个视图控制器中实现的。
class ViewController: NSViewController {
@IBAction func testAction(_ sender: Any) {
print("testAction")
}
}
但是该操作永远不会被触发。如果我在 TabViewController 中放置相同的操作,它确实会被触发。
如果我将 TabViewController 的 nextRespodner
属性 设置为 ViewController,它没有帮助:
class TabViewController: NSTabViewController {
override func viewDidLoad() {
super.viewDidLoad()
nextResponder = children.first // Does not help
}
}
不知何故,响应链没有像我预期的那样工作。有人对此有解决方案吗?这是该问题的示例项目:https://github.com/Iomegan/ResponderChainStoryboard
将此添加到 ViewController
:
override func viewDidAppear() {
super.viewDidAppear()
view.window?.makeFirstResponder(self)
}
我希望我的 Mac 应用程序的 NSToolbar 项触发第一响应者对象的操作。我有一个具有以下故事板布局的应用程序:
如您所见,window 的工具栏中有一个按钮(测试操作)。它连接到第一响应者对象的动作函数。该功能本身是在 TabView 的第一个视图控制器中实现的。
class ViewController: NSViewController {
@IBAction func testAction(_ sender: Any) {
print("testAction")
}
}
但是该操作永远不会被触发。如果我在 TabViewController 中放置相同的操作,它确实会被触发。
如果我将 TabViewController 的 nextRespodner
属性 设置为 ViewController,它没有帮助:
class TabViewController: NSTabViewController {
override func viewDidLoad() {
super.viewDidLoad()
nextResponder = children.first // Does not help
}
}
不知何故,响应链没有像我预期的那样工作。有人对此有解决方案吗?这是该问题的示例项目:https://github.com/Iomegan/ResponderChainStoryboard
将此添加到 ViewController
:
override func viewDidAppear() {
super.viewDidAppear()
view.window?.makeFirstResponder(self)
}