J'ai essayé de créer une application Cocoa qui utilise le storyboard et Swift dans Xcode 6. Cependant, lorsque j'ai essayé de modifier le titre de la fenêtre à partir de NSViewController
, le code suivant ne fonctionnait pas.
self.title = "changed label"
Lorsque j'ai écrit le code ci-dessus dans la fonction viewDidLoad()
, le titre de l'application résultante reste toujours window
.
De plus, le code suivant provoque une erreur, car View Controller ne possède pas une propriété telle que window
.
self.window.title = "changed label"
Alors, comment puis-je modifier le titre de la fenêtre par programme dans l'application Cocoa qui est construite sur un storyboard?
Il y a 2 problèmes avec votre code:
viewDidLoad
s'appelle avant la vue est ajoutée à la fenêtreNSViewController
n'a pas de propriété windowPour résoudre le premier problème, vous pouvez remplacer viewDidAppear()
. Cette méthode s'appelle après la vue est complètement passée à l'écran. À ce stade, il est déjà ajouté à une fenêtre.
Pour obtenir une référence au titre de la fenêtre, vous pouvez accéder à la fenêtre d'un contrôleur de vue via sa vue: self.view.window.title
Ajoutez simplement ce qui suit à votre sous-classe de contrôleur de vue, et le titre de la fenêtre devrait changer:
override func viewDidAppear() {
super.viewDidAppear()
self.view.window?.title = "changed label"
}
Cela a fonctionné pour moi, currentDict est NSDictionary passé de viewController précédent
var currentDict:NSDictionary?
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
if let myString:String = currentDict?["title"] as? String {
self.title = myString
}
}