【问题标题】:Text color of extra label in view-based NSTableView基于视图的 NSTableView 中额外标签的文本颜色
【发布时间】:2012-04-18 15:02:39
【问题描述】:

在基于视图的 NSTableView 中,您的自定义行视图和单元格视图(NSTableRowViewNSTableCellView 的子类)获取它们的 backgroundStyle 属性集,因此您可以知道背景是浅色还是主要深色(例如选定的突出显示的行)。

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

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

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

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

【问题讨论】:

  • 表格单元格视图的默认文本标签是如何作用的?

标签: cocoa nstableview


【解决方案1】:

除了覆盖 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/

【讨论】:

    【解决方案2】:

    只需继承 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-07-20
      • 1970-01-01
      • 2012-03-16
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多