2016-11-29 9 views
0

У меня есть NSWindowController и NSViewController, оба настроены в раскадровке.Динамическое изменение содержимого NSWindowController

  • Когда я установил contentViewController в Interface Builder, все работает так, как ожидалось.
  • Когда я устанавливаю contentViewController программно в windowDidLoad, все работает так, как ожидалось.

Теперь я пытаюсь обновить контроллер представления контента в ответ на нажатие кнопки на панели инструментов (см. Ниже).

@IBAction func toolbarButtonClicked(_ sender: Any) { 
    contentViewController = storyboard?.instantiateController(withIdentifier: "VC") as! NSViewController? 
} 

Это назначение вызывает viewWillAppear называться на контроллере представления, но в этой точке зрения содержание не имеет окна назначены.

Почему это? Возможно ли динамическое изменение окна contentViewController следующим образом?

ответ

0

Это выглядит следующим образом:

  • Когда представление содержимого настраивается в раскадровке или windowDidLoad, вид уже есть окно, к тому времени viewWillAppear вызывается, то есть, когда появляется само окно.
  • Когда представление содержимого установлено после появления окна, вызывается viewWillAppear, чтобы указать, что представление содержимого будет добавлено в окно; вид не имеет окна, пока не вызывается viewWillLayout.

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