2

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

这个的 NSView 版本是什么?我在文档中找不到这样的东西。

4

1 回答 1

0

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

将 NSTableCellView 对象(或自定义视图)从对象库拖到表格视图中的相应列。... 通常,视图类是 NSTableCellView 的子类。

它没有说明这是什么,或者你为什么要使用它。它看起来像一个具有 NSTextField 和 NSImageView 的 NSView,仅此而已——因此,如果您不创建具有这些的视图,则很容易忽略此类而只是 NSView 的子类。

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

特别是,似乎backgroundStyleNSTableCellView 的属性是导致文本值实际变化的原因。文档说:

默认实现自动将调用转发到所有实现 setBackgroundStyle: 或者是 NSControl 的子视图,这些子视图具有响应 setBackgroundStyle: 的 NSCell 类。

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

虽然在 Apple 的文档中并不完全清楚(“this”指的是什么?),但似乎 NSTableView 调用-setBackgroundStyle:了定义它的任何视图。因此,如果您不想继承 NSTableCellView,您也可以将一个属性添加到您自己的 NSView:

var backgroundStyle: NSBackgroundStyle

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

于 2016-08-23T00:35:27.353 回答