如何更改 NSTableCellView 中 NSTextField 的突出显示颜色?

How can you change the highlight color of a NSTextField within a NSTableCellView?

在故事板中,当我将 NSTableCellView 中的 NSTextField 的文本颜色设置为 Control Text Color 时,颜色变为黑色,当单元格为 selected/highlighted 时,它将变为白色的。当您取消选择时,颜色将 return 变为黑色。您可以免费获得所有这些行为。

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

没有自动获得所需内容的方法。您在黑色标签上看到的自动行为是由 NSTextFieldCell(或其超级class 之一,如 NSCell)实现的。它由单元格的 backgroundStyle 设置为 NSBackgroundStyleDark 触发。当单元格自身的 backgroundStyle 被设置时,单元格的 backgroundStyleNSTableCellView 设置。 NSTableCellViewbackgroundStyleNSTableRowView 在其 interiorBackgroundStyle 更改时设置,这发生在其其他属性(如 selectedemphasized 更改时设置。

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

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