我将基于单元格的NSTableView迁移为基于视图。使用NSCell,确定是否突出显示了一个单元格(例如,以白色而不是黑色绘制文本),我查看了NSCell highlighted
属性。
NSView的版本是什么?我在文档中找不到这样的内容。
答案 0 :(得分:0)
最简单的方法是简单地继承NSTableCellView。所有文档都说您可以子类化NSTableCellView或NSView,例如Table View Programming Guide for Mac:
将NSTableCellView对象(或自定义视图)从对象库拖到表视图中的相应列。 ...通常,视图类是NSTableCellView的子类。
它没有说明这是什么,或者为什么你想要使用它。它看起来像一个NSView,它有一个NSTextField和一个NSImageView,它就是它 - 所以如果你不是在制作一个有这些的视图,那么它很容易忽略这个类而只是子类的NSView。
有趣的是,如果你在NSTableCellView中有任何NSTextFields(即使你没有使用textField
属性!),它们会自动使用正确的浅色/深色。
特别是,似乎NSTableCellView的backgroundStyle
属性是导致文本值实际更改的原因。文档说:
默认实现自动转发对所有实现setBackgroundStyle的子视图的调用:或者是NSControl,它们具有响应setBackgroundStyle的NSCell类:。
当然,NSTextField是带有NSCell的NSControl,所以它就可以调用它。
虽然它在Apple的文档中没有完全清楚("这"指的是什么?),但似乎NSTableView调用了{{1在任何定义它的视图上。因此,如果您不想继承NSTableCellView,您也可以只将属性添加到您自己的NSView中:
-setBackgroundStyle:
并让你的绘图代码使用它。