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