2010-05-07 70 views
5

我有一個NSTableView顯示我有的對象數組。對於這些對象(行)中的每一個,我想根據我在每個對象上運行的函數的結果更改顯示文本的顏色;每行着色NSTableView文本

因此,例如表中存在於另一個列表(或其他需求)中的所有對象我想以綠色文本顯示它們,而不存在的對象以紅色顯示。

我該怎麼做呢?

回答

6

假設您的表中有NSTextFieldCell(對於其他單元格,設置文本顏色可能會有所不同),您可以通過實施NSTableView的委託方法來實現此目的。

首先,您必須在Interface Builder或代碼中爲NSTableView定義一個代理。例如,這可以是您的應用程序控制器。

然後,只需要實現以下方法:

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

每次NSTableView的會畫一個細胞,你必須修改它,它拿得出之前的機會。

查看NSTableViewDelegate文檔頁面瞭解更多詳情。

+0

在我使用的表中,我只有NSTextFieldCell的,但是如果我有不同的情況,該方法不能工作嗎? – Tristan 2010-05-07 08:41:19

+0

好吧,不是所有的單元格都有「textColor」和「setTextColor:」方法,就像NSButtonCell一樣。這只是一件要檢查的事情。 – 2010-05-07 10:21:29