NSWindowController/NSViewController "Presentation" 情节提要中的设置

NSWindowController/NSViewController "Presentation" setting in Storyboard

Presentation 选项(在 Attribute Inspector 中)在 Cocoa 的 StoryBoard 中究竟做了什么。

它从

给select两个选项

P.S 用谷歌搜索标题时,结果与 powerpoint 演示相关

演示风格影响 "Show" segues。可能它也会影响其他 segue,但我只测试了 Show segue。我在 OS X 10.10.5 (Yosemite) 和 Xcode 7.1.1.

上进行了测试

如果 window 控制器的显示样式是 "Multiple"(默认),那么 window 控制器的 Show segue 总是加载 window 的新实例故事板中的控制器。这意味着您可以同时拥有 window 控制器的多个实例,每个实例在屏幕上都有自己的 window。默认情况下,这些 windows 将相互堆叠,因此在您移动或关闭它们之前不会很明显地看到发生了什么。

如果 window 控制器的呈现样式是 "Single",并且 window 控制器的一个实例已经从情节提要中加载,并且 window 控制器仍然存在(可能是因为它的 window 仍在屏幕上),那么对该视图控制器的 Show segue 将 创建一个新实例。相反,Show segue 会将现有 window 控制器的 window 置于最前面。

如果您想要像 Xcode 的设备 window 这样的行为,这种行为很有用,其中只能有一个这样的 window。您在情节提要的 Window 菜单中创建一个 "Devices" 菜单项,并使用 Show segue 将其连接到情节提要中的 Devices window 控制器。将 Devices window 控制器的显示样式设置为 Single。现在菜单项将永远不会创建第二个设备 window 控制器(如果已经存在的话)。

您可能想以某种方式将 window 的 excludedFromWindowsMenu 属性 设置为 true,这样它就不会在 Window 菜单中出现两次(因为默认情况下它会将自己附加到该菜单)。例如,您可以使用 NSWindowController 的子类来设置它:

class DevicesWindowController: NSWindowController {
    override func windowDidLoad() {
        super.windowDidLoad()
        window?.excludedFromWindowsMenu = true
    }
}

视图控制器也有展示样式,因为您还可以将 Show segues 连接到视图控制器。连接到视图控制器的 Show segue 会自动创建一个 window 控制器以在运行时包含视图控制器。 window 控制器的表示样式实际上设置为视图控制器的,因此如果将视图控制器的表示设置为 Single,您将获得相同的单例行为。

据我所知,故事板设置没有相应的 public 属性 或您可以在代码中使用的方法。

如果将 Show segue 连接到情节提要引用(Xcode 7 中的新增功能),则 segue 会忽略目标 window 控制器的呈现样式,并且就像 "Multiple"。即使目的地实际上与参考位于同一故事板中,也会发生这种情况。