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