我尝试通过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类来实例化它们。