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

Posted

技术标签:

【中文标题】如何将动作从 NSToolbar 项发送到 TabViews 的第一响应者【英文标题】:How to send action from NSToolbar item to First Responder of TabViews 【发布时间】:2018-10-22 12:48:49 【问题描述】:

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

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

将此添加到ViewController

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

【讨论】:

以上是关于如何将动作从 NSToolbar 项发送到 TabViews 的第一响应者的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像从一项活动发送到另一项活动?

自定义 NSToolbar 中项目之间的空间

如何将当前位置从一项活动发送到另一项活动?

如何将字符串从一项活动发送到另一项活动?

如何在NSToolbar中启用toolbaritems?

如何将数据从引导菜单项发送到 ASP.NET MVC 控制器