NSCell 突出显示的 属性 的 NSView 版本是什么?

What's the NSView version of NSCell's highlighted property?

我正在将基于单元格的 NSTableView 迁移为基于视图。使用 NSCell,为了确定单元格是否突出显示(例如,以白色而不是黑色绘制文本),我查看了 NSCell highlighted 属性.

这个的 NSView 版本是多少?我在文档中找不到类似的内容。

最简单的方法是简单地子class NSTableCellView。所有文档都说您可以子 class NSTableCellView 或 NSView,例如 Table View Programming Guide for Mac:

Drag an NSTableCellView object (or a custom view) from the object library to the appropriate column in the table view. ... Typically, the view class is a subclass of NSTableCellView.

它没有说明这是什么,也没有说明您为什么要使用它。它看起来像一个 NSView,它有一个 NSTextField 和一个 NSImageView,仅此而已——所以如果你没有创建一个包含这些的视图,很容易忽略这个 class 而只是 subclass NSView .

不过,有趣的是,如果您在 NSTableCellView 中有任何 NSTextFields(即使您不为此使用 textField 属性!),它们会自动使用正确的 light/dark 着色。

特别是,NSTableCellView 的 backgroundStyle 属性 似乎是导致文本值实际更改的原因。文档说:

The default implementation automatically forwards calls to all subviews that implement setBackgroundStyle: or are an NSControl, which have NSCell classes that respond to setBackgroundStyle:.

NSTextField 是一个带有 NSCell 的 NSControl,当然,所以它会调用它。

虽然在 Apple 的文档中并不完全清楚("this"指的是什么?),但似乎 NSTableView 在任何视图上调用 -setBackgroundStyle:定义它。所以如果你不想子class NSTableCellView,你也可以只添加一个属性到你自己的NSView:

var backgroundStyle: NSBackgroundStyle

并让您的绘图代码使用它。