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

时间:2015-06-27 14:48:46

标签: xcode macos highlight nstextfield nstablecellview

在故事板中,当我将[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] [2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 的文本颜色设置为NSTextFieldNSTableCellView时,颜色变为黑色,当选择/突出显示单元格时,它将变为白色。取消选择时,颜色将返回黑色。你可以免费获得所有这些行为。

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

enter image description here

1 个答案:

答案 0 :(得分:4)

没有自动获得你想要的方法。您使用黑色标签看到的自动行为由NSTextFieldCell(或其中一个超类,如NSCell)实现。它由单元格backgroundStyleNSBackgroundStyleDark的设置触发。当设置了自己的backgroundStyle时,单元格NSTableCellViewbackgroundStyle设置。 NSTableCellView backgroundStyle NSTableRowView在其interiorBackgroundStyle更改时设置selected emphasized,其textColor和{{1}等其他属性发生},已设置。

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

您可以实现NSTextFieldNSTableCellView的自定义子类。您的类将实现(覆盖-setBackgroundStyle:textColor的子类。在您的方法中,您可以检查正在设置的样式并更改文本字段NSTextField。如果它是覆盖,请通过超级电话。 (虽然backgroundStyle目前没有实现if ([NSTextField instancesRespondToSelector:@selector(setBackgroundStyle:)]) [super setBackgroundStyle:backgroundStyle];属性,但它可能会在未来使用.Apple已经表示他们将添加封面方法来控制当前只存在于单元类中的方法。所以,你应该D{rand(),D[0]}以便将来安全。)