2010-05-07 11 views
5

Ich habe eine NSTableView, die ein Array von Objekten anzeigt, die ich habe. Für jedes dieser Objekte (Zeilen) möchte ich die Farbe des angezeigten Textes abhängig von den Ergebnissen einer Funktion ändern, die ich für jedes Objekt ausführe;Coloring NSTableView Text pro Zeile

So zum Beispiel alle Objekte in der Tabelle, die in einer anderen Liste (oder einer anderen Anforderung) existieren, möchte ich sie in grünem Text anzeigen, und Objekte, die nicht existieren, werden rot angezeigt.

Wie würde ich das machen?

Antwort

6

Angenommen, Sie haben NSTextFieldCell in Ihrer Tabelle (für andere Zellen kann die Einstellung Textfarbe variieren), können Sie dies erreichen, indem Sie eine NSTableView Delegate-Methode implementieren.

Zuerst müssen Sie einen Delegaten für die NSTableView entweder in Interface Builder oder in Ihrem Code definieren. Dies kann zum Beispiel Ihr Anwendungscontroller sein.

Dann implementieren nur die folgende Methode:

- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { 
    NSTextFieldCell *cell = aCell; 
    if (...) { 
     [cell setTextColor:[NSColor greenColor]]; 
    } else if (...) { 
     [cell setTextColor:[NSColor redColor]]; 
    } else { 
     [cell setTextColor:[NSColor blackColor]]; 
    } 
} 

Jedes Mal, wenn die NSTableView eine Zelle ziehen, werden Sie die Möglichkeit haben, es zu ändern, bevor sie gezogen bekommen.

Weitere Informationen finden Sie auf der Dokumentationsseite NSTableViewDelegate.

+0

In der Tabelle, die ich verwende, habe ich nur NSTextFieldCell's, aber was, wenn ich anders hätte, würde diese Methode nicht funktionieren, wie es ist? – Tristan

+0

Nun, nicht alle Zellen haben „Textfarbe“ und „SetTextColor:“ Methoden, wie die NSButtonCell. Es ist nur eine Sache zu überprüfen. –