在NSTableView中更改标题的背景颜色

时间:2016-11-30 15:41:58

标签: swift nstableview

我试图在基于视图的NSTableView中更改标题行的背景颜色但没有运气

尝试了这个:

tableView.headerView?.layer?.backgroundColor = CGColor.black

和这个(正如之前的早期Obj-C帖子中所建议的那样):

for column in tableView.tableColumns {
    column.headerCell.backgroundColor = NSColor(red: 0/255, green: 108/255, blue: 178/255, alpha: 1)
    column.headerCell.textColor = NSColor.blue
}

3 个答案:

答案 0 :(得分:1)

创建自定义NSTableHeaderCell子类并设置NSTableColumn的{​​{1}}属性可让您自定义表格标题行的外观。

Apple的documentation建议在自定义标题单元格时覆盖headerCell方法,但这不会填充整个单元格的背景颜色 - 需要覆盖drawInterior:withFrame。调用draw:withFrame将绘制标题的标签和其他元素。如果要将标题的内容保持在单元格中垂直居中,则需要调整内部框架。

drawInterior

有一点需要注意 - 如果需要,还需要绘制列分隔线。

答案 1 :(得分:0)

我也有同样的问题。我发现headercell是从NSTextFieldCell继承的。其中有背景颜色属性。您可以访问它并将其设置为新颜色。记得将绘制背景设置为YES。

*when you create new column*
[[newCol headerCell] setDrawsBackground:YES];


- (void)tableView:(NSTableView *)tableView didClickTableColumn:(NSTableColumn *)tableColumn{
    [[tableColumn headerCell] setBackgroundColor:<color you want to change to>];
}

答案 2 :(得分:0)

添加彩色子视图可能是实现这一目标的最简洁的方法。它介于默认背景和绘制标题文本和控件的单元格之间

NSRect rect = tableview.headerView.frame;
rect.size.width = 10000; /// just pick something wide enough here
MyColoredView * coverView = [[MyColoredView alloc] initWithFrame:rect];
coverView.autoresizingMask = tableview.headerView.autoresizingMask;
[tableview.headerView.superview addSubview:aView positioned:NSWindowBelow relativeTo:tableview.headerView];