在Storyboard中的NSWindowController/NSViewController"Presentation"设置

Kau*_*eya 32 macos cocoa storyboard nsviewcontroller nswindowcontroller

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

在此输入图像描述

它提供了两个选项供您选择

PS用Google搜索标题时,结果与powerpoint演示文稿有关

rob*_*off 14

演示风格影响"显示"segues.可能它也影响其他segue,但我只测试了一个Show segue.我使用Xcode 7.1.1在OS X 10.10.5(Yosemite)上进行了测试.

如果窗口控制器的显示样式为"多个"(默认),则显示窗口控制器的segue始终从故事板中加载窗口控制器的新实例.这意味着您可以同时使用窗口控制器的多个实例,每个实例在屏幕上都有自己的窗口.默认情况下,这些窗口会叠加在一起,因此在移动或关闭窗口之前发生的事情并不明显.

如果窗口控制器的显示样式为"单个",并且已经从故事板加载了窗口控制器的实例,并且该窗口控制器仍然存在(可能是因为其窗口仍在屏幕上),则显示该视图的segue controller 不会创建新实例.相反,Show segue会将现有的窗口控制器窗口置于前面.

如果您想要Xcode的"设备"窗口之类的行为,此行为非常有用,其中只能有一个此类窗口.您可以在故事板的"窗口"菜单中创建"设备"菜单项,并使用Show segue将其连接到故事板中的"设备"窗口控制器.将Devices窗口控制器的演示样式设置为Single.现在,菜单项永远不会创建第二个设备窗口控制器(如果已存在).

您可能希望以某种方式将窗口的excludedFromWindowsMenu属性设置为true,因此它不会在"窗口"菜单中出现两次(因为默认情况下它会将自身附加到该菜单).例如,您可以使用它的子类NSWindowController来设置它:

class DevicesWindowController: NSWindowController {
    override func windowDidLoad() {
        super.windowDidLoad()
        window?.excludedFromWindowsMenu = true
    }
}
Run Code Online (Sandbox Code Playgroud)

视图控制器也具有演示样式,因为您还可以将Show segues连接到视图控制器.连接到视图控制器的Show segue会自动创建一个窗口控制器,以在运行时包含视图控制器.窗口控制器的显示样式有效地设置为视图控制器,因此如果将视图控制器的显示设置为Single,则会获得相同的单例行为.

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

如果将Show segue连接到storyboard引用(Xcode 7中的新增内容),则segue将忽略目标窗口控制器的呈现样式,并且就像它是"Multiple"一样.即使目标实际上与引用位于同一个故事板中,也会发生这种情况.