在基于视图的NSTableView
中,您的自定义行和单元格视图(NSTableRowView
和NSTableCellView
的子类)会设置其backgroundStyle
属性,因此您知道背景很浅或主要是黑暗(对于选定的突出显示的行)。
这甚至会传递给直接的子视图。
现在,表格单元格视图的默认文本标签对此做出了正确的反应,因此在深色背景上,文本将以适当的浅色绘制。
但是,添加NSTextField
以提供额外文本(在Interface Builder中设置自定义文本颜色)不会自动遵循此约定。
API中是否有一种简单的方法可以让文本字段发挥得很好,或者我是否必须将其子类化?
答案 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]];
}
}