2012-06-25 11 views
5

Ich möchte die boolesche enabled Eigenschaft einer NSTextField an den Zustand einer NSButton binden. Ich habe bereits versucht, eine benutzerdefinierte NSValueTransformer hinzufügen, die den Zustand der NSButton in NSNumber verwandelt. In diesem Szenario sind die Textfelder aus irgendeinem Grund jedoch ständig deaktiviert. Mein zweiter Ansatz: Zum Scheitern führt auch, NSValueTransformer bietet keine Rückkehr Primitivtypen wie BOOL.Cocoa: Wie binden Sie eine boolesche Eigenschaft an NSCellStateValue?

Beispiel:
Der Screenshot zeigt ein Beispiel, in dem die Textfelder sind deaktiviert, da das Ankreuzfeld den Zustand NSOnState hat. Ich möchte auch die Etiketten an diesen Zustand binden.

Disabled text fields

Ferner wäre es zweckmäßig sein, wenn ich einen "disabled Text" in Interface Builder einstellen könnte. Im obigen Beispiel habe ich den Text in der zugehörigen Klasse gesetzt.


Edit:

Ich habe self.anonymousLoginCheckbox.state als Modell Key Path für die aktiviert Eigenschaft des Kontos Textfeld ein. Ähnlich für das Passwort-Textfeld. Es tut jedoch nicht Arbeit.

Interface Builder Binding


Update:

Ich habe ein example project available on GitHub showing the implementation beschrieben freundlicherweise von Nicolas Bachschmidt.

Antwort

13

NSButton ist nicht KVO-konform für den Schlüssel state. Cocoa Bindings erfordern, dass das beobachtete Objekt Benachrichtigungen sendet, wenn sich die beobachtete Eigenschaft ändert. Als NSButtonstate ist nur ein Wrapper für die Zelle state, -[NSButton setState:] Methode (und die automatische KVO-Benachrichtigungen) wird nicht aufgerufen, wenn der Benutzer auf die Schaltfläche klicken (aber -[NSCell setState:] ist). Wenn Sie den Modellschlüsselpfad auf self.anonymousLoginCheckbox.cell.state festlegen, wird es funktionieren.