views:

44

answers:

2

I have an NSTableView with some cells that where the value of enabled is set through bindings. I want to be able to change the colour of the cells depending on whether the cell is enabled or not. Previously I have done this through the NSTAbleView delegate method tableView: willDisplayCell: forTableColumn: row: which up until now worked fine. I've had to switch off the table delegate though and so I need to find another way to do it. I suspect it's a problem with an obvious answer, but how do I access each cell in the table? I can get the number of rows and columns in the table, and I can cycle trough them, I'm just not sure what method to call to get the cell in column i, row j.

A: 

Assuming you don't want to color an entire column, the easiest way is tableView:willDisplayCell:forTableColumn:row:, since there is only one cell per column (the view uses the same cell for that column in every row).

Why did you get rid of your delegate?

Peter Hosey
No, that's not the only way. See below.
NSResponder
Duly edited; thanks.
Peter Hosey
+1  A: 

Generally speaking, you shouldn't be cycling through the rows and columns. Your code should be able to do the right thing, given any row or column.

One way to do it is to write your own cell class and implement the appropriate drawing and highlighting methods that you'll find in the NSCell documentation. You'd implement – drawWithFrame:inView: and probably -highlight:withFrame:inView:

Yet another way is to subclass NSTableView, and override -preparedCellAtColumn:row: to do whatever manipulation of the cell you want just before it's drawn.

The easiest way to do what you want though, is to just use the delegate method as you were before. Why don't you want to do it that way?

NSResponder