2009-06-02 6 views
2

ausgewählt Ich habe eine NSPopUpButtonCell in einem benutzerdefinierten NSCell und ich bin mitNSPopUpButtonCell innerhalb benutzerdefinierten NSCell Auswahl nicht ändern, wenn Artikel aus dem Menü

- (BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView 

das Popup-Menü zu erzeugen, wenn es angeklickt wird.

Ich habe auch copyWithZone überschrieben: in meiner benutzerdefinierten Zelle, um die PopUpCell-Instanzvariable zu kopieren, so dass jede Zeile in meiner Tabellenansicht eine eigene Popup-Zelle hat.

Mein Problem ist, dass, obwohl das Menü gerade gut, und Sie können ein Element aus dem Menü auswählen, wenn ein Element ausgewählt ist die Zelle ändert nicht das ausgewählte Element, um die ausgewählte aus dem Menü zu entsprechen.

Wenn ich jedoch die Zeile in Kopie mit Zone auskommentiere, die die Zelle kopiert, dann verhält es sich so weit wie die Auswahl richtig ist (ändert sich zum ausgewählten Element, obwohl jede einzelne Zeile dasselbe ausgewählte Element hat) .

Weiß jemand, warum das ist, oder mehr auf den Punkt, wie ich es beheben kann?

+0

Ist Ihnen bekannt, dass NSTableView für jede Zeile keine Kopie der NSTableColumn-Zelle erstellt, aber eine Instanz wiederverwendet? –

Antwort

0

Haben Sie

–trackMouse:inRect:ofView:untilMouseUp: 

statt

startTrackingAt:inView: 

mit versucht?

0

Ich würde vorschlagen, dass die Zelle nicht das Kopieren und stattdessen die Verwendung von:

- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex

... Delegatmethode die Zelle mit den richtigen Daten einrichten, bevor jede Zeile gezogen wird.

+0

Was ich eigentlich mache ist die Verwendung von Bindungen mit einem NSArrayController, der von Zeit zu Zeit eine Kopie der einzelnen Zelle zu erstellen scheint. Ich rufe manuell [Zelle Kopie] selbst an keinem Punkt an. –