Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Coloring NSTableView Text per row

I have a NSTableView that is displaying an array of objects I have. For each of these objects (rows) I would like to change the color of the text displayed depending on the results of a function I run on each object;

So for example all the object in the table that exist in another list (or some other requirement) I want to display them in green text, and objects that don't exist display in red.

How would I go about doing this?

like image 878
Tristan Avatar asked May 07 '10 05:05

Tristan


1 Answers

Assuming that you have NSTextFieldCell in your table (for other cells, setting text color may vary), you can achieve this by implementing a NSTableView's delegate method.

First, you have to define a delegate for the NSTableView, either in Interface Builder or in your code. This can be your application controller for example.

Then, just implement the following method:

- (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]];
    }
}

Each time the NSTableView will draw a cell, you have the opportunity to modify it before it get drawn.

Check out the NSTableViewDelegate documentation page for more details.

like image 84
Laurent Etiemble Avatar answered Sep 20 '22 17:09

Laurent Etiemble