如何将动作从NSToolbar项目发送到TabViews的第一响应者

时间:2018-10-22 12:48:50

标签: swift cocoa xcode-storyboard first-responder nstoolbar

我希望Mac应用程序的NSToolbar项触发第一个响应者对象的操作。我有一个具有以下情节提要布局的应用程序:

enter image description here

如您所见,窗口的工具栏中有一个按钮(测试操作)。它连接到第一响应者对象的动作功能。该函数本身在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

1 个答案:

答案 0 :(得分:1)

将此添加到ViewController

override func viewDidAppear() {
    super.viewDidAppear()
    view.window?.makeFirstResponder(self)
}