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