Xcode 7中的NSToolbar使用Storyboards(NSWindowController - > NSSplitViewController)

gbd*_*vid 8 macos nstoolbar swift nssplitviewcontroller xcode7

嗨我已经看过这个问题已经问了几次但是没有明确的答案,所以我为xcode 7和swift2创建了它(这可能会改变一些事情).

我使用Xcode 7和Cocoa OSX Story board + swift2创建了一个项目,所以我的项目开始于一个连接到NSViewController 的NSWindowController(正如预期的那样!).我在我的窗口控制器中添加了一个NSToolbar,并在工具栏中添加了一个NSButton.我将我的NSViewController更改为新的NSSplitViewController之一,它链接到三个NSViewController并水平显示它们的视图 - 使用垂直分隔 - (类似于您在照片应用程序中看到的布局或Yosemite +中的页面).我的最终目标是"我的工具栏"中的按钮显示并隐藏第一个拆分.

这是我的理解,并且我希望实现这一点我应该在NSSplitViewController中创建一个动作,它或多或少地改变了它们在这里工作的方式约束:如何在mac中折叠和展开视图应用?.

然后以某种方式将此操作链接到工具栏中的NSButton ...它恰好位于NSWindowController中(远远超出层次结构中)...

我已经解决了有关NSToolbar和故事板的其他问题,但未能实现我的目标:

  • YouTube视频:Cocoa Programming L17 - NSToolbar是我发现的最接近解决问题的方法,但他的方法不适用于故事板,只创建自己的xib文件.
  • 在这个问题:如何在Xcode 6和Storyboard中使用NSToolBar?一个人建议使用第一个响应器建立链接,并期望在运行时连接所有东西(看起来有点狡猾,而不是苹果实现它的方式,我认为......).第二个人建议在NSWindowController中创建一个视图控制器变量,并从那里操纵它的属性......但同样,有点狡猾.

  • 我在这个问题中看到的最新评论似乎是解决问题的最佳方法(但仍然不如我想的那么好)是将NSObjectController添加到每个场景的停靠点,当场景加载时,设置值对象的另一个secene的控制器.这真的是最好的方式吗?如果是这样,我怎么能实现这个呢?

Apple确实(再次)在WWDC15中提到他们为osx和拥有视图控制器的拆分视图控制器创建了故事板,以便您可以将逻辑和工作移动到特定的视图控制器,因此我期望从在我的拆分视图控制器内部,因为这是需要更改的目标.

有谁知道如何从视图控制器本身实现这一点?我真的无法找到一种方法将ToolBarItem连接到它.

gbd*_*vid 3

好的,我几天前就创建了这个问题,到目前为止还没有答案,所以我用我最近为克服这个问题所做的事情来回答。

创建 Xcode 项目后,我这样做了:

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

    @IBOutlet 弱变量 mySplitViewItem:NSSplitViewItem!

  • 为 NSWindowController 创建了一个子类 WindowController

  • 在 WindowController 类中添加了一个链接到 NSToolbarItem(我的按钮)的 IBAction
  • 添加了一个属性,可将窗口控制器的内容获取为MySplitViewController

    var mySplitViewController: MySplitViewController { return self.window?.contentViewController as! 我的SplitViewController }

  • 现在我可以在我创建的操作中从窗口控制器访问分割视图控制器的属性:

    mySplitViewController。mySplitViewItem.collapsed = true

我创建了一些示例代码来执行此操作(但使用视图控制器并更改此处标签的文本,以防万一有人想查看具有此行为的工作项目。还有一篇关于它的博客文章:)