Cocoa: Как установить заголовок окна из контроллера просмотра в Swift?

Я попытался построить приложение Cocoa, которое использует раскадровку и Swift в Xcode 6. Однако, когда я попытался изменить заголовок окна из NSViewController, следующий код не работает.

self.title = "changed label"

Когда я написал код выше в функции viewDidLoad(), итоговое название приложения останется window.

Кроме того, следующий код вызывает ошибку, поскольку View Controller не имеет такого свойства, как window.

self.window.title = "changed label"

Итак, как я могу изменить название окна программно в приложении Cocoa, которое построено на раскадровке?

Ответы

Ответ 1

В коде есть 2 проблемы:

  • viewDidLoad вызывается перед добавлением представления в окно
  • NSViewController не имеет свойства окна

Чтобы исправить первый, вы можете переопределить viewDidAppear(). Этот метод вызывается после того, как представление полностью перешло на экран. В этот момент он уже добавлен в окно.
Чтобы получить ссылку на заголовок окна, вы можете получить доступ к окну контроллера просмотра через его представление: self.view.window.title

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

override func viewDidAppear() {
    super.viewDidAppear()
    self.view.window?.title = "changed label"
}

Ответ 2

Это сработало для меня, currentDict - это NSDictionary, прошедший из предыдущего viewController

var currentDict:NSDictionary?

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    if let myString:String = currentDict?["title"] as? String {
        self.title = myString
    }

}