2014-12-17 9 views
7

Diese Frage ist eine Erweiterung link
(die Frage in der Verbindung vor allem Ziele, Binde- NSPopupbutton an einen NSArrayController)Binding Bild NSPopupbutton von NSArrayController

Ich habe eine Person Klasse mit Eigenschaften NSString *name und NSImage *avatar
I müssen alle Namen von Personen in der Popup-Schaltfläche anzeigen, wie in der folgenden Abbildung zu sehen ist.

Aber jetzt, als Anforderung geändert hat, muss ich Avatar der Person auch zeigen.
Wie verwende ich Cocoa Bindungen Person Avatar NSPopup Taste zu binden, so dass es wie das in der oberen Bild sucht michael (letzte Menüoption)


Hinweis: zur Demonstration vorübergehend hinzugefügt Michael wurde folgenden Code:

person.title = @"Michael"; 
person.image = [NSImage imageNamed:@"avatar.png"]; 
[_popupButton.menu addItem:person]; 
+0

NSMenuItem macht eine Bildbindung verfügbar. Gibt es die Frage, wie man im Interface Builder vorgeht? Da Sie Zugriff auf dieses NSMenuItem * und einen NSImage * haben, erstellen Sie einfach eine Bindung, wie Sie eine andere Bindung erstellen. – stevesliva

+0

@stevesliva Ja – Kaunteya

+0

Wie erstellen Sie die NSMenuItems dynamisch? Denn dort wird dein Bild injiziert. –

Antwort

0

Es gibt zwei Möglichkeiten, wie Sie das erreichen können: -

zuerst die zellbasierte Tableview innerhalb dieser beiden Spalte nehmen eine für die Bildzelle und eine zweite für die Textzelle. Füllen Sie die Tabelle durch Bindungen und fügen Sie dann Ihre Tableview in Ihrer Popup-Schaltfläche in der untenen Art und Weise: -

NSMenu *theMenu = [[NSMenu alloc] initWithTitle:@""]; 
NSMenuItem *Item = [[NSMenuItem alloc] initWithTitle:@"NameList" action:NULL keyEquivalent:@""]; 
[Item setView:self.tableVw]; 
[theMenu addItem:Item]; 
[self.popUptn setMenu:theMenu]; 

Zweite den folgenden einfachen Schritten folgen: -

Angenommen, Ihr Array enthält die Namen Elemente.

1) Wählen Sie arrayContoller binden an FileOwner's und ModelKeyPath->array.

2) Wählen Sie PopUpButton innerhalb binding Inspector->Selected Object binden an FileOwner's und ModelKeyPath->yourString. Dies wird den gewünschten Namen entsprechend auswählen.

3) Wählen Sie PopUpButton innen binding Inspector->Content Values und ModelKeyPath->array

4) Jetzt für die image innerhalb popupButton Einstellung unter Code verweisen: -

NSMenuItem *menuItm=[self.popUpBtn itemWithTitle:@"Michael"]; 
[menuItm setImage:[NSImage imageNamed:@"dot.gif"]]; 

Edit: -

1) In Die erste Methode, die Ihr Text und Ihr Bild beide durch Bindung auffüllen, Sie müssen nur diese Tabellenansicht hinzufügen in Ihrem Popup-Knopf.

2) In der zweiten Methode zeigt Ihr Popup-Button das Bild für den Nachnamen aber programmgesteuert. Wenn die Bilder für alle Namen angezeigt werden sollen, verwenden Sie die for-Schleife, um Bilder innerhalb des Menüelements festzulegen.

+1

Bitte lesen Sie die Frage erneut. Ich möchte nur Cocoa Bindings machen. Ich war mir der von Ihnen gegebenen Lösung bewusst. Auch der Kommentar in Bounty besagt: "Ich erwarte eine bindende einzige Lösung." – Kaunteya

+0

Sie können Tabellenansicht verwenden und durch Bindung können Sie die Daten auffüllen. Aber Sie müssen diese Tabellenansicht innerhalb Ihres Popup-Buttons hinzufügen. Siehe die aktualisierte Antwort. –