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
}
}