我为顶层商品和其他商品使用相同的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
覆盖方法。所以我猜自定义headerCells必须设置其他方式。
可能甚至不是更改文本颜色的正确方法。
您是否知道如何正确设置顶层NSOutlineView项的文本颜色?
一个可能的线索,当我将“突出显示”从“源列表”更改为“无”时,它将显示如下列表:
它具有适当的字体颜色,但显示格式和背景带有边框时出现不必要的格式。
那么,我应该继续这种方式并尝试根据需要修复此格式吗?还是“源列表”有解决方案?
答案 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;