【问题标题】:How can you change the highlight color of a NSTextField within a NSTableCellView?如何在 NSTableCellView 中更改 NSTextField 的突出显示颜色?
【发布时间】:2015-06-27 14:48:46
【问题描述】:

在情节提要中,当我将 NSTableCellView 中的 NSTextField 的文本颜色设置为 Control Text Color 时,颜色变为黑色,当单元格被选中/突出显示时,它将变为白色。当您取消选择时,颜色将恢复为黑色。您可以免费获得所有这些行为。

我在默认下创建了另一个文本字段,它类似于 iOS 的(请参见下图中的标签游戏)。我将文本颜色更改为灰色,一切正常。但是,当我现在选择/突出显示单元格时,颜色保持灰色并且不会切换为白色。我怎样才能通过情节提要获得这种行为?如果不可能,通过代码?

【问题讨论】:

  • 您的问题和标签使用 OS X 类名,但您的屏幕截图显示的是 iOS 视图(例如 UIImageView)。有什么关系?
  • OSX 很合适,但我在 Google 上找不到示例图片,所以我使用了旧的 iOS 界面图像。没关系,因为我想显示文本标签(黑色)和详细文本标签(灰色)。

标签: xcode macos highlight nstextfield nstablecellview


【解决方案1】:

没有自动获得你想要的东西的方法。您看到的带有黑色标签的自动行为是由NSTextFieldCell(或其超类之一,如NSCell)实现的。它由单元格的backgroundStyle 设置为NSBackgroundStyleDark 触发。当设置了自己的backgroundStyle 时,单元格的backgroundStyleNSTableCellView 设置。 NSTableCellViewbackgroundStyle 在其 interiorBackgroundStyle 更改时由 NSTableRowView 设置,这发生在设置其其他属性(如 selectedemphasized)时。

无论如何,如果单元格的 textColor[NSColor controlTextColor] 或具有等效的 RGB 值,则单元格只会自动更改它用于绘制的颜色。因此,它不适用于您的灰色标签。

您可以实现NSTableCellViewNSTextField 的自定义子类。您的类将实现(覆盖,对于NSTableCellView 的子类)-setBackgroundStyle:。在您的方法中,您可以检查正在设置的样式并更改文本字段的textColor。如果是覆盖,请调用 super。 (虽然NSTextField 当前没有实现backgroundStyle 属性,但它可能会在未来实现。Apple 已经表示他们将为当前仅存在于单元类上的方法的控件添加覆盖方法。所以,你应该这样做@987654343 @ 以确保未来安全。)

【讨论】:

  • 感谢您的详细解答,不胜感激。
猜你喜欢
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 2011-02-02
  • 2010-12-12
  • 1970-01-01
  • 2012-03-27
  • 2011-06-19
相关资源
最近更新 更多