如何设置顶级NSOutlineView项目的文本颜色

时间:2018-09-11 13:46:29

标签: objective-c xcode cocoa nsoutlineview

我为顶层商品和其他商品使用相同的NSTableCellView。 我为所有项目设置了相同的文本颜色:

- (nullable NSView*) outlineView:(NSOutlineView *)outlineView viewForTableColumn:(nullable NSTableColumn *)tableColumn item:(id)item_;
{
    NSTableCellView *cell = [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
    cell.textField.stringValue = @"hi";
    cell.textField.textColor = NSColor.redColor;
    return cell;
}

这会导致顶级商品具有某种系统颜色-而不是红色。

enter image description here

我剩余的相关代码:

- (BOOL) outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item_;
{
    return YES // only for the first item;
}

我已尝试按照其他主题的建议将NSTableHeaderCell子类化,但是它不起作用。

这是我尝试更改headerCells的方法:

- (void) viewDidLoad;
{
    for (NSTableColumn *col in self.ov_sidebar.tableColumns) {
        col.headerCell = [NCTableHeaderCell_customizable new];
    }

    self.ov_sidebar.delegate = self;
    self.ov_sidebar.dataSource = self;
}

但是没有调用NCTableHeaderCell_customizable覆盖方法。所以我猜自定义headerCells必须设置其他方式。 可能甚至不是更改文本颜色的正确方法。

您是否知道如何正确设置顶层NSOutlineView项的文本颜色?

一个可能的线索,当我将“突出显示”从“源列表”更改为“无”时,它将显示如下列表:

enter image description here

它具有适当的字体颜色,但显示格式和背景带有边框时出现不必要的格式。

那么,我应该继续这种方式并尝试根据需要修复此格式吗?还是“源列表”有解决方案?

1 个答案:

答案 0 :(得分:0)

您快到了。您可以尝试一下。

for (NSTableColumn *col in self.ov_sidebar.tableColumns) {
    col.headerCell = [[MyTableHeaderCell alloc]initTextCell:@"hi"];
}

即使您直接从NSTableHeaderCell子类化,也总会有一些折衷。

  @interface MyTableHeaderCell : NSTableHeaderCell

  @end
  @implementation MyTableHeaderCell

  -(NSColor *) textColor{
   return NSColor.blueColor;
  }

 @end

此方法有效且不建议使用,因为NSTableHeaderCell文档中未提及它们。

我展示了一种实现目标的简单方法。

在IB中添加一个额外的TextField。并将其标记为1001或您喜欢的任何内容。 您的第一个是cellView的textField,请记住将其隐藏在IB中。 对!隐藏它,但不删除它。

然后更改代码以引用第二个文本字段。

NSTableCellView *cell = [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
NSTextField * field = (NSTextField * )[cell viewWithTag:1001];
field.stringValue = ((MyData *) item_).value;
field.textColor = NSColor.redColor;

return cell;

enter image description here

enter image description here