【问题标题】:What's the NSView version of NSCell's highlighted property?NSCell 的高亮属性的 NSView 版本是什么?
【发布时间】:2016-08-04 20:41:19
【问题描述】:

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

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

【问题讨论】:

    标签: nstableview nsview nstableviewcell


    【解决方案1】:

    最简单的方法是简单地继承 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 2012-09-14
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多