OSX故事板 - 使用标准segue打开非模态窗口

时间:2014-07-11 09:34:30

标签: xcode macos swift xcode6

我尝试通过故事板segue(OSX)显示NSViewController。打开窗口将是一个检查窗口,因此它应该是非模态的。

当我通过按住Ctrl键从触发按钮拖动到窗口控制器来创建动作segue时,我提供了以下segue样式选项:

  • 模态
  • 酥料饼
  • 定制

前三个选项显然不合适。

我确定我可以创建自定义segue来显示视图。这将涉及创建一个类,实现一些方法等。

然而,由于我的要求对我来说似乎很基本,我想知道我是否遗漏了一些东西 很明显,这是一种通过画布打开非模态窗口的简单方法。

我正在使用XCode6-Beta3。

1 个答案:

答案 0 :(得分:13)

至少现在(Beta3),非模态视图需要有自己的窗口,而且没有简单的方法为它创建一个segue。

而是将新的Window Controller对象拖到Storyboard上。它将带有自己的内容视图作为关系Segue。但是,如果要为窗口使用不同的视图(例如:选项卡视图控制器),只需删除新的视图控制器并从新的窗口控制器进行控制拖动,即可将其视图用于视图控制器。窗口内容。

重要提示: 在故事板中选择Window Controller对象,并在Identity Inspector中,将Storyboard ID设置为一个标识窗口的字符串(例如:“检查员“)。

然后,只需编写一些代码来显示窗口:

var inspectorController: NSWindowController?
@IBAction func showInspector(sender : AnyObject) {
    if !inspectorController {
        let storyboard = NSStoryboard(name: "Main", bundle: nil)
        inspectorController = storyboard.instantiateControllerWithIdentifier
           ("Inspector") as? NSWindowController
    }
    if inspectorController { inspectorController!.showWindow(sender) }
}

我实际上发现将 更好地用于任何窗口的主故事板。其中一个原因是因为使用Storyboard(至少现在),在应用程序启动时无法拦截初始segue,并且永远不会在主窗口控制器上调用windowWillLoad。

相反,为Application和/或Document窗口创建单独的故事板,并使用AppDelegate类来实例化它们。更多信息和工作示例in this thread.