基于视图的NSTableView中额外标签的文本颜色

时间:2012-04-18 15:02:39

标签: cocoa nstableview

在基于视图的NSTableView中,您的自定义行和单元格视图(NSTableRowViewNSTableCellView的子类)会设置其backgroundStyle属性,因此您知道背景很浅或主要是黑暗(对于选定的突出显示的行)。

这甚至会传递给直接的子视图。

现在,表格单元格视图的默认文本标签对此做出了正确的反应,因此在深色背景上,文本将以适当的浅色绘制。

但是,添加NSTextField以提供额外文本(在Interface Builder中设置自定义文本颜色)不会自动遵循此约定。

API中是否有一种简单的方法可以让文本字段发挥得很好,或者我是否必须将其子类化?

2 个答案:

答案 0 :(得分:5)

您也可以这样做,而不是覆盖drawRect:

- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle {
    NSColor *textColor = (backgroundStyle == NSBackgroundStyleDark) ? [NSColor windowBackgroundColor] : [NSColor controlShadowColor];
    self.detailTextField.textColor = textColor;
    [super setBackgroundStyle:backgroundStyle];
}

另见:http://gentlebytes.com/blog/2011/08/30/view-based-table-views-in-lion-part-1-of-2/

答案 1 :(得分:3)

只需将NSTableCellView子类化,然后实现drawRect:

- (void)drawRect:(NSRect)dirtyRect
{
    // Drawing code here.
    if (self.backgroundStyle == NSBackgroundStyleDark) {
        [yourTextFieldIVar setTextColor:[NSColor whiteColor]];
    } else if(self.backgroundStyle == NSBackgroundStyleLight) {
        [yourTextFieldIVar setTextColor:[NSColor blackColor]];
    }
}