我正在使用基于视图的表视图,并且不希望它在选择时使用白色文本颜色绘制NSTextFields。 我无法找到有效的解决方案。所以任何帮助都非常感激。
这是我的问题:
我希望“选择为白色”文本也以默认文本颜色绘制。
到目前为止,我发现了
tableView:viewForTableColumn:item:
中设置属性并没有真正帮助NSTextField
颜色设置为自定义颜色(与控件默认颜色不同)将阻止以白色绘制,但仍会丢失字体样式(粗体,斜体等)。NSTableView
的{{1}}属性设置为selectionHighlightStyle
即可,但不会重绘NSTableViewSelectionHighlightStyleNone
。选择风格也不是我想要的。我希望第一次单击以选择行,第二次单击以编辑文本字段。当您使用NSTableRowView
时,您的第一次点击开始编辑文本字段。我无法弄清楚文本字段如何获得白色。我已经覆盖NSTableViewSelectionHighlightStyleNone
,并意识到在选择更改时永远不会调用它。所以我猜一个NSAttributedString是在NSTableView绘图/选择例程中的某个地方构建的。
非常感谢任何帮助。
答案 0 :(得分:13)
我找到了答案。我必须继承NSTableCellView
并覆盖setBackgroundStyle:
。这就是全部!
- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle {
[super setBackgroundStyle: NSBackgroundStyleLight];
}
答案 1 :(得分:0)
我没有覆盖NSTableCellView
的{{1}},而是更方便地覆盖backgroundStyle
中的viewWillDraw()
。这实际上是在选择期间默认更改单元格视图的背景样式的方法。
您可以通过以下方式禁用此行为:
NSTableRowView
答案 2 :(得分:-1)
我在表视图中设置了单元格颜色委托的-tableView:willDisplayCell:forTableColumn:row:方法。
-(void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell
forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
if(tableView==<table view id of interest>)
{
...
[cell setTextColor:<colour appropriate for this cell>];
...
}
...
}
这不会影响字体大小或样式。