2015-12-08 1 views
0

Ce que je voudrais faire est de lier le titre d'un NSButton afin que je puisse changer le titre du bouton en changeant la valeur de la variable à laquelle il est lié.NSButton Titre ne se met pas à jour lorsque la valeur liée change

J'ai créé le projet de l'application swift cacao par défaut et ajouté deux boutons à la fenêtre. ButtonA et ButtonB.

Pour la liaison de valeur de ButtonB, j'ai lié le titre au délégué de l'application avec le chemin de clé du modèle défini sur self.buttonBTitleBinding.

J'ai défini l'action de ButtonA sur la fonction de délégué de l'application buttonA.

J'ai défini le délégué de l'application comme suit:

import Cocoa 

@NSApplicationMain 
class AppDelegate: NSObject, NSApplicationDelegate 
{ 
    @IBOutlet weak var window: NSWindow! 

    var buttonBTitleBinding = "Hello" 
    { 
     didSet 
     { 
      NSLog("buttonBTitleBinding: %@", buttonBTitleBinding) 
     } 
    } 


    @IBAction func buttonA(sender: NSButton) 
    { 
     if self.buttonBTitleBinding == "Hello" 
     { 
      self.buttonBTitleBinding = "Bye" 
     } 
     else 
     { 
      self.buttonBTitleBinding = "Hello" 
     } 
    } 


    func applicationDidFinishLaunching(aNotification: NSNotification) 
    { 
     // Insert code here to initialize your application 
    } 



    func applicationWillTerminate(aNotification: NSNotification) 
    { 
     // Insert code here to tear down your application 
    } 
} 

Lorsque je lance l'application, le titre de bouton B est « Bonjour », donc je sais qu'il est lié à la variable correcte.

Lorsque j'appuie sur le bouton A, je ne vois dans la console:

buttonBTitleBinding: Bye 
buttonBTitleBinding: Hello 
buttonBTitleBinding: Bye 
buttonBTitleBinding: Hello 
buttonBTitleBinding: Bye 
buttonBTitleBinding: Hello 
buttonBTitleBinding: Bye 
buttonBTitleBinding: Hello 

Je sais que didSet pour buttonBTitleBinding est appelé et que sa valeur est en train de changer.

Toutefois, le titre du bouton ne se met pas à jour.

Existe-t-il un moyen de faire fonctionner cela?

+0

Pour que les fixations fonctionnent, la propriété doit être modifiée de manière KVO. Je suis nouveau à Swift mais j'ai trouvé ceci: [L'observation de la valeur-clé (KVO) est-elle disponible dans Swift?] (Http://stackoverflow.com/questions/24092285/is-key-value-observation-kvo-available- in-swift). En bref: ajoutez le modificateur 'dynamic' à la propriété. – Willeke

+0

Si vous souhaitez ajouter ceci comme réponse, je le marquerai comme tel. – ericg

Répondre