用标准的segue打开非模态窗口



我尝试通过storyboard segue (OSX)显示NSViewController。打开的窗口将是一个检查器窗口,所以它应该是非模态的。

当我通过按ctrl从触发按钮拖动到窗口控制器来创建一个动作segue时,我得到了以下segue样式选项:

  • 模态
  • <
  • 表/gh>
  • 弹出窗口
  • 自定义

前三个选项显然不合适。

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

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

我用的是XCode6-Beta3

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

相反,将一个新的Window Controller对象拖放到Storyboard上。它会有自己的内容视图作为一个关系Segue。然而,如果有一个不同的视图,你想要使用的窗口(例如:Tab视图控制器),只需删除新的视图控制器,并从新的窗口控制器control-drag到视图控制器的视图,你希望使用的窗口内容。

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

然后,编写一小段代码来显示窗口:

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,并且在主窗口控制器上永远不会调用windowwwillload。

相反,为应用程序和/或文档窗口创建单独的故事板,并使用AppDelegate类来实例化它们。

最新更新