Подтвердить что ты не робот

NSWindowController/NSViewController Настройка "Презентация" в раскадровке

Что именно делает опция Presentation (в Attribute Inspector) в StoryBoard для Cocoa.

enter image description here

Он дает два варианта выбора из

  • Single
  • Несколько

P.S Когда googled заголовок, результаты связаны с представлением PowerPoint

4b9b3361

Ответ 1

Стиль презентации влияет на "Show" segues. Возможно, это влияет и на другие сегменты, но я только тестировал Show segue. Я тестировал на OS X 10.10.5 (Yosemite) с Xcode 7.1.1.

Если стиль представления оконного контроллера "Multiple" (по умолчанию), то Show segue для оконного контроллера всегда загружает новый экземпляр оконного контроллера из раскадровки. Это означает, что вы можете получить сразу несколько экземпляров оконного контроллера, каждый со своим окном на экране. По умолчанию эти окна будут складываться друг на друга, поэтому не будет очевидно, что произошло до тех пор, пока вы не переместите или не закроете.

Если стиль представления оконного контроллера "Single", и экземпляр оконного контроллера уже загружен из раскадровки, и этот оконный контроллер все еще существует (по-видимому, потому, что его окно все еще находится на экране), затем Show segue к этому контроллеру представления будет не создать новый экземпляр. Вместо этого Show segue приведет к тому, что окно оконного окна будет открыто.

Это поведение полезно, если вам нужно поведение, например, окно Xcode Devices, где может быть только одно такое окно. Вы создаете пункт меню "Устройства" в меню "Окно" в раскадровке и подключаете его к оконному контроллеру "Устройства" в раскадровке с помощью Show segue. Задайте стиль презентации оконного контроллера устройств "Одиночный". Теперь элемент меню никогда не будет создавать второй контроллер окон устройств, если он уже существует.

Вероятно, вы захотите каким-либо образом установить для свойства window excludedFromWindowsMenu значение true, поэтому он не появляется дважды в меню "Окно" (потому что по умолчанию он присоединяется к этому меню). Например, вы можете использовать подкласс NSWindowController, который устанавливает его:

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

Контроллеры просмотра также имеют стиль презентации, потому что вы также можете подключить Show segues для просмотра контроллеров. A Show segue, подключенный к контроллеру вида, автоматически создает контроллер окна, который должен содержать контроллер представления во время выполнения. Стиль представления оконного контроллера эффективно настраивается на контроллер вида, поэтому вы получаете одно и то же одноэлементное поведение, если вы установите представление контроллера представления на Single.

Насколько я могу судить, параметр раскадровки не имеет соответствующего общедоступного свойства или метода, который вы можете использовать в коде.

Если вы подключаете Show segue к справочной системе раскадровки (новый в Xcode 7), то segue игнорирует стиль презентации диспетчера окон назначения и действует так, как если бы это было "Multiple". Это происходит, даже если пункт назначения находится на том же раскадровке, что и ссылка.