嗨,我已经看过这个问题了好几次了,但是还没有确切的答案,所以我为xcode 7和swift2创建了它(无论如何可能会有所改变)。

我使用Xcode 7和Cocoa OSX Story board + swift2创建了一个项目,所以我的项目以一个连接到NSViewController的 NSWindowController (按预期!)开始。我向窗口 Controller 添加了 NSToolbar ,并向工具栏添加了 NSButton 。我将NSViewController更改为新的 NSSplitViewController 之一,该链接链接到三个 NSViewController ,并使用垂直分隔线水平显示其 View (类似于您在照片应用程序或优胜美地+页面中看到的布局)。我的最终目标是显示和隐藏第一个拆分的“我的工具栏”中的按钮。

我的理解是,并且我希望能实现这一点,我应该在NSSplitViewController中创建一个 Action ,该 Action 或多或少会改变它们在此处的工作方式约束How to do collapse and expand view in mac application?

然后以某种方式将此 Action 链接到工具栏中的NSButton ...恰好在NSWindowController中(在层次结构中处于隔离状态)。

我已经经历了有关NSToolbar和 Storyboard 的其他问题,但未能实现我的目标:

  • YouTube视频:Cocoa Programming L17 - NSToolbar,它是我找到的最能解决问题的视频,但是他的方法不适用于 Storyboard ,只能创建自己的xib文件。
  • 在这个问题中:How to use NSToolBar in Xcode 6 and Storyboard?一个人建议使用第一个响应器来建立链接,并期望一切都在运行时进行连接(这看起来有些晦涩,而不是苹果认为的实现方式...)。第二个人建议在NSWindowController中创建一个 View Controller 变量,然后从那里操纵其属性...但是同样,这也有点狡猾。


  • 我在该问题中看到的一个最新评论是,似乎是解决问题的最佳方法(但仍然不及我想的那样),是在每个场景的停靠点以及场景加载时添加NSObjectController,将对象的值设置为其他secene的 Controller 。这真的是前进的最佳方法吗?如果是这样,我如何实现这一目标?


  • 苹果确实在WWDC15中再次提到,他们为osx和拥有 View Controller 的拆分 View Controller 创建了 Storyboard ,以便您可以将逻辑和工作转移到特定的 View Controller ,因此我期望从在我的拆分 View Controller 中,因为这是需要更改的目标。

    有谁知道如何从 View Controller 本身实现这一目标?我确实还没有找到将ToolBarItem连接到它的方法。

    最佳答案

    好的,我已经在几天前提出了这个问题,到目前为止还没有答案,所以我已经回答了我最近为解决该问题所做的工作。

    创建Xcode项目后,我执行了以下操作:

  • 为NSSplitViewController
  • 创建了一个子类 MySplitViewController
  • 为每个NSSplitViewItem添加了一个IBOutlet。例如:

    @IBOutlet弱var mySplitViewItem:NSSplitViewItem!
  • 为NSWindowController的
  • 创建了一个子类WindowController。
  • 在WindowController类中添加了一个IBAction,该IBAction链接到NSToolbarItem(我的按钮)
  • 添加了一个属性,该属性获取窗口 Controller 的内容为 MySplitViewController

    var mySplitViewController:MySplitViewController {
    返回self.window?.contentViewController为! MySplitViewController
  • 现在,我可以在创建的操作中从“窗口 Controller ”访问拆分 View Controller 的属性:

    mySplitViewController。 mySplitViewItem.collapsed = true

  • 我创建了一些执行此操作的示例代码(但是使用 View Controller 并更改标签here的文本,以防万一有人希望看到具有此行为的工作项目。还有一个blog post :)

    10-08 09:24