对于顶级项目和其他项目,我使用相同的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 overiden方法被调用。因此,我想定制的headerCells必须以其他方式设置。很可能这并不是改变文本颜色的正确方式。
您是否知道如何正确设置顶级NSOutlineView项的文本颜色?
当我将“高亮”从“源列表”更改为“无”时,可能会出现这样的列表:

它有适当的字体颜色,但不想要的格式与公开和背景与边框。
所以,我应该继续这样做,并尝试根据需要修复这种格式,还是有“源列表”的解决方案?
发布于 2018-09-11 19:09:02
你快到了。你可以试试这个。
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或者你喜欢的任何东西。第一个是textField of cellView,记得把它藏在IB中。正确的!把它藏起来,但不把它移走。
然后更改代码以引用第二个textfield。
NSTableCellView *cell = [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
NSTextField * field = (NSTextField * )[cell viewWithTag:1001];
field.stringValue = ((MyData *) item_).value;
field.textColor = NSColor.redColor;
return cell;


https://stackoverflow.com/questions/52277449
复制相似问题