如何在子视图中保留控制文本颜色的功能?
How to keep functionality of Control Text Color in subview?
我有一个 NSTableview,在子视图的内部和外部都有标签。
选择一行后,文本标签中的文本颜色应变为白色。
在这种情况下,Status
和 Rank
都有控制文本颜色,但只有 Status
在选中时变为白色,因为它不在子视图中。
即使在子视图中,是否可以在文本标签中保留控件颜色的此功能?
您必须通过添加扩展或声明子类并覆盖 setBackgroundStyle
来手动编写代码,因为 NSTableView
不会递归调用该函数到其子视图。
extension NSTableView {
func setBackgroundStyle(_ newValue: NSBackgroundStyle) {
for view in self.subviews {
view.setBackgroundStyle(newValue)
}
}
}
extension NSTextField {
func setBackgroundStyle(_ newValue: NSBackgroundStyle) {
switch newValue {
case NSBackgroundStyleDark:
self.textColor = NSColor.controlHighlightColor
case NSBackgroundStyleLight:
self.textColor = NSColor.controlColor
}
super.setBackgroundStyle(newValue)
}
}
我有一个 NSTableview,在子视图的内部和外部都有标签。 选择一行后,文本标签中的文本颜色应变为白色。
在这种情况下,Status
和 Rank
都有控制文本颜色,但只有 Status
在选中时变为白色,因为它不在子视图中。
即使在子视图中,是否可以在文本标签中保留控件颜色的此功能?
您必须通过添加扩展或声明子类并覆盖 setBackgroundStyle
来手动编写代码,因为 NSTableView
不会递归调用该函数到其子视图。
extension NSTableView {
func setBackgroundStyle(_ newValue: NSBackgroundStyle) {
for view in self.subviews {
view.setBackgroundStyle(newValue)
}
}
}
extension NSTextField {
func setBackgroundStyle(_ newValue: NSBackgroundStyle) {
switch newValue {
case NSBackgroundStyleDark:
self.textColor = NSColor.controlHighlightColor
case NSBackgroundStyleLight:
self.textColor = NSColor.controlColor
}
super.setBackgroundStyle(newValue)
}
}