如何在子视图中保留控制文本颜色的功能?

How to keep functionality of Control Text Color in subview?

我有一个 NSTableview,在子视图的内部和外部都有标签。 选择一行后,文本标签中的文本颜色应变为白色。

在这种情况下,StatusRank 都有控制文本颜色,但只有 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)
    }
}