如何更改 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
被设置时,单元格的 backgroundStyle
由 NSTableCellView
设置。 NSTableCellView
的 backgroundStyle
由 NSTableRowView
在其 interiorBackgroundStyle
更改时设置,这发生在其其他属性(如 selected
和 emphasized
更改时设置。
无论如何,如果单元格的 textColor
为 [NSColor controlTextColor]
或具有等效的 RGB 值,则单元格只会自动更改其用于绘制的颜色。所以,它不适用于您的灰色标签。
您可以实现 NSTableCellView
或 NSTextField
的自定义子 class。您的 class 将实施(覆盖,对于 NSTableCellView
的子 class)-setBackgroundStyle:
。在您的方法中,您可以检查正在设置的样式并更改文本字段的 textColor
。如果是覆盖,请调用 super。 (虽然 NSTextField
目前没有实现 backgroundStyle
属性,但它可能会在未来实现。Apple 表示他们将为控件添加覆盖方法,这些方法目前仅存在于单元 classes。所以,你应该 if ([NSTextField instancesRespondToSelector:@selector(setBackgroundStyle:)]) [super setBackgroundStyle:backgroundStyle];
以确保未来安全。)
在故事板中,当我将 NSTableCellView
中的 NSTextField
的文本颜色设置为 Control Text Color
时,颜色变为黑色,当单元格为 selected/highlighted 时,它将变为白色的。当您取消选择时,颜色将 return 变为黑色。您可以免费获得所有这些行为。
我在默认情况下创建了另一个文本字段,它类似于 iOS 的文本字段(请参见下图中的标签游戏)。我将文本颜色更改为灰色,一切正常。但是,当我现在 select/highlight 单元格时,颜色保持灰色并且不会切换为白色。我怎样才能通过情节提要获得这种行为?如果不可能,通过代码?
没有自动获得所需内容的方法。您在黑色标签上看到的自动行为是由 NSTextFieldCell
(或其超级class 之一,如 NSCell
)实现的。它由单元格的 backgroundStyle
设置为 NSBackgroundStyleDark
触发。当单元格自身的 backgroundStyle
被设置时,单元格的 backgroundStyle
由 NSTableCellView
设置。 NSTableCellView
的 backgroundStyle
由 NSTableRowView
在其 interiorBackgroundStyle
更改时设置,这发生在其其他属性(如 selected
和 emphasized
更改时设置。
无论如何,如果单元格的 textColor
为 [NSColor controlTextColor]
或具有等效的 RGB 值,则单元格只会自动更改其用于绘制的颜色。所以,它不适用于您的灰色标签。
您可以实现 NSTableCellView
或 NSTextField
的自定义子 class。您的 class 将实施(覆盖,对于 NSTableCellView
的子 class)-setBackgroundStyle:
。在您的方法中,您可以检查正在设置的样式并更改文本字段的 textColor
。如果是覆盖,请调用 super。 (虽然 NSTextField
目前没有实现 backgroundStyle
属性,但它可能会在未来实现。Apple 表示他们将为控件添加覆盖方法,这些方法目前仅存在于单元 classes。所以,你应该 if ([NSTextField instancesRespondToSelector:@selector(setBackgroundStyle:)]) [super setBackgroundStyle:backgroundStyle];
以确保未来安全。)