2017-08-04 32 views
0

我有一个NSTableview标签内外的子视图。 选择一行时,文本标签中文本的颜色应变为白色。如何在子视图中保留控件文本颜色的功能?

enter image description here

在这种情况下,StatusRank都有控件文本颜色,但只有当Status选择,因为它不是在一个子视图变为白色。

enter image description here

是否可以保持颜色控制这个功能在为textLabel即使是在一个子视图?

enter image description here

回答

1

您必须手动代码,通过添加扩展或声明子类,并覆盖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) 
    } 
} 
+0

这看起来像一个绝对合理的方法。我尝试了一些,但也有一些问题:子视图中的视图是NSView而不是NSTextfield。所以它不能识别'setBackgreoundStyle()'。同样在NSTextfield扩展中,'override func setBackgroundStyle'“不会覆盖任何metod从它的超类”。 –

+0

对不起,您只需实现setBackgroundStyle函数,不需要重写,检查NSTableCellView类参考: 设置后,默认实现会自动将调用转发给实现-setBackgroundStyle的所有子视图:或者是NSControl(其中包含NSCells,它们响应-setBackgroundStyle:)._ –

相关问题