2

在基于视图的 中NSTableView,您的自定义行和单元格视图(和的子类NSTableRowView)设置NSTableCellView了它们的backgroundStyle属性,因此您知道背景是浅色还是主要深色(对于选定的突出显示的行)。

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

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

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

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

4

2 回答 2

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/

于 2012-07-09T12:30:01.150 回答
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]];
    }
}
于 2012-06-21T19:52:47.730 回答