【问题标题】:OSX Storyboards - Open non-modal window with standard segueOSX Storyboards - 使用标准 segue 打开非模态窗口
【发布时间】:2014-07-11 09:34:29
【问题描述】:

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

当我通过 Ctrl 键从触发按钮拖动到窗口控制器来创建动作转场时,我会看到以下转场样式选项:

  • 模态
  • 弹窗
  • 自定义

前三个选项显然不合适。

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

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

我正在使用 XCode6-Beta3。

【问题讨论】:

  • 酸视图(控制器)有导航栏吗?
  • 主窗口有一个导航栏(触发按钮实际上在工具栏内)。我试图打开的视图控制器没有。
  • Hmm .. 在这种情况下,如果您在 IB 中从第一个视图按住 ctrl 并拖动到第二个视图(例如 Xcode 5.1.1),您是否也获得了“推送”选项? (我认为那是您的“标准转场”。)
  • 很遗憾没有。我猜“推送”可能只是 IOS 故事板的一个选项,而不是 OSX。在我的例子中,标准的 segue 是模态的。
  • 对不起,我走错了(iOS)轨道...

标签: xcode macos swift xcode6


【解决方案1】:

至少现在(Beta3),非模态视图需要有自己的窗口,并且没有简单的方法可以为此创建转场。

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

重要提示:在 Storyboard 中选择 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。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多