2010-05-07 60 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