如何在基于视图的NSTableView中禁用选择中的白色文本颜色?

时间:2012-07-22 12:39:09

标签: cocoa nstableview

我正在使用基于视图的表视图,并且不希望它在选择时使用白色文本颜色绘制NSTextFields。 我无法找到有效的解决方案。所以任何帮助都非常感激。

这是我的问题:

enter image description here

我希望“选择为白色”文本也以默认文本颜色绘制。

到目前为止,我发现了

  • tableView:viewForTableColumn:item:中设置属性并没有真正帮助
  • NSTextField颜色设置为自定义颜色(与控件默认颜色不同)将阻止以白色绘制,但仍会丢失字体样式(粗体,斜体等)。
  • NSTableView的{​​{1}}属性设置为selectionHighlightStyle即可,但不会重绘NSTableViewSelectionHighlightStyleNone。选择风格也不是我想要的。我希望第一次单击以选择行,第二次单击以编辑文本字段。当您使用NSTableRowView时,您的第一次点击开始编辑文本字段。
  • 如果NSTextField有边界,则文本颜色不会更改。但我不想要有边框的文本字段(如屏幕截图所示。文本字段是可编辑的)

我无法弄清楚文本字段如何获得白色。我已经覆盖NSTableViewSelectionHighlightStyleNone,并意识到在选择更改时永远不会调用它。所以我猜一个NSAttributedString是在NSTableView绘图/选择例程中的某个地方构建的。

非常感谢任何帮助。

3 个答案:

答案 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>];
      ...
      }
   ...
}

这不会影响字体大小或样式。