我们如何将NSToolbars与NSWindowControllers一起使用

时间:2015-07-28 14:37:09

标签: swift swift2 nswindowcontroller nstoolbar

我正在构建一个使用工具栏的应用。我只想使用故事板(没有xib和没有nib文件,只有一个主要故事板和一些快速文件)。

这是我必须使用的(默认)配置:

  • NSWindowController,“First Entry Point”
  • 一切发生的NSViewController
  • NSWindowController拥有的NSToolbar
  • NSToolbar中的NSPopUpButton

Storyboard

但是,我的NSPopUpButton是动态的:它需要加载数据以呈现给用户,然后需要将其传递给NSViewController。它使用的数据与NSUserDefaults一起存储,因此我可以从任何地方检索它。然后,当用户进行选择时,操作将被发送到第一响应者链,因此NSViewController可以捕获它。

我遇到的问题是如何将NSViewController(或其他NSWindowController)的数据传回NSPopUpButton。例如,当我更新设置时,我希望我的NSPopUpButton重新加载。

有没有办法让视图控制器与其父NSWindowController进行通信?

以下是一个小情况图:

NSToolbarItem <===> NSWindowController ===> First Responder ===> NSViewController

1 个答案:

答案 0 :(得分:0)

好吧,我刚刚找到答案here

我可以通过简单的:

从Window Controller访问我的ViewController
let viewController = self.window!.contentViewController! as! ViewController

同样,我可以从ViewController访问我的WindowController:

let parentWindowController = self.view.window!.windowController! as! WindowController