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

How to set text color of top-level NSOutlineView item

我对顶级项目和其他项目使用相同的 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;
}

这导致顶级项目具有某种系统颜色 - 而不是红色。

我剩余的相关代码:

- (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 个覆盖方法中的 none 个。所以我想自定义 headerCells 必须以其他方式设置。 可能这甚至不是更改文本颜色的正确方法。

你知道如何正确设置顶级 NSOutlineView 项目的文本颜色吗?

一个可能的线索,当我将 "Highlight" 从 "Source List" 更改为 "None" 时,它会显示如下列表:

它有正确的字体颜色,但不需要带有披露的格式和带边框的背景。

所以,我应该继续这种方式并根据需要尝试修复此格式,还是有 "Source List" 的解决方案?

你快到了。你可以试试这个。

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;