Objective-C-Bindungen - Binden einer Enum an einen NSPopupButton

8

Ich arbeite an einem Projekt, das ideal für Cocoa-Bindings für die Benutzeroberfläche geeignet ist, aber ich habe ein Problem, den Wert einer Objekteigenschaft zu binden, und kann keine geeignete Lösung finden. Das Objekt ist wie folgt:

%Vor%

In der XIB habe ich einen Objekt-Controller, dessen Inhaltsobjekt an eine "currentSelection" -Eigenschaft des Fenster-Controllers gebunden ist, die eine Instanz des obigen Objekts ist. Ich habe dann den Namen und die Kennung gebunden, die alle wie erwartet funktionieren, aber ich kann nicht sehen, wie ich die Enums binden kann.

Idealerweise möchte ich, dass ein NSPopupButton "Best" und "Worst" anzeigt und den richtigen Enum-Wert auswählt. Ich habe die Enumeration aktualisiert, um einen expliziten numerischen Wert zu haben, und ich glaube, dass ich einen Werttransformer benötige, um die Werte zu konvertieren, aber ich bleibe bei genau wie dies implementiert werden könnte.

Kann mir jemand helfen oder mich in die richtige Richtung weisen?

Danke, J

    
JWood 22.08.2011, 11:56
quelle

3 Antworten

8

Sie können dafür ein NSValueTransformer verwenden.

Da die Enumerationswerte nur ganze Zahlen sind, sind sie in einem NSNumber -Objekt gekapselt.

Ein gültiger Transformator könnte wie folgt aussehen.

%Vor%

Dies kann an die Selected-Value-Bindung von NSPopupButton gebunden werden.

Wenn Sie eine bidirektionale Bindung erstellen möchten (d. h. in der Lage sein, etwas in NSPopupButton auszuwählen, müssen Sie den folgenden Code für die umgekehrte Transformation hinzufügen:

%Vor%     
Sebastian 21.09.2011, 13:43
quelle
3

Eine Enum ist kein Objekt. Cocoa-Bindungen sind eine Möglichkeit, Modellobjekte zum Anzeigen von Objekten zu verbinden.

    
NSResponder 22.08.2011 13:47
quelle
2

Wenn Sie den Interface Builder verwenden, können Sie für jede NSMenuItem-Elemente über den Eigenschaftenbereich enumerierte Ganzzahlen einbetten. Wählen Sie dann NSPopUpButton und geben Sie das bindende 'ausgewählte Tag' für die Eigenschaft mit dem Schlüsselpfad an.

In diesem Beispiel wird angenommen, dass der Dateibesitzer von IB CSProfile ist. Bereiten Sie NSPopUpButton mit zwei NSMenuItem-Elementen vor und versehen Sie sie mit 0 (kQualityBest) und 1 (kQualityWorst). Navigieren Sie dann zum "ausgewählten Tag" von NSPopUpButton und prüfen Sie die Bindung an "Besitzer der Datei" (CSProfile) mit dem Schlüsselpfad des Modells "Qualität".

%Vor%     
Kaz Yoshikawa 06.11.2011 14:20
quelle