web-dev-qa-db-fra.com

Cocoa: Comment définir le titre de la fenêtre depuis le contrôleur de vue dans Swift?

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?

17
Blaszard

Il y a 2 problèmes avec votre code:

  • viewDidLoad s'appelle avant la vue est ajoutée à la fenêtre
  • NSViewController n'a pas de propriété window

Pour 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"
}
48
Thomas Zoechling

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
    }

}
0
Mike Zriel