防止NSTableRowView在不清晰时更改突出显示?

时间:2016-01-28 01:31:40

标签: cocoa nstableview

我在左窗格中有一个带有表格视图的NSSplitView。我注意到当我在左窗格中选择了一个项目并将焦点更改为右窗格时,左窗格失去焦点,突出显示的行的高亮颜色变为灰色,文本变为黑色。

我通过覆盖NSTableRowView中的drawSelectionInRect覆盖了突出显示颜色。通过这样做,高亮颜色保持相同的自定义颜色,但文本变暗看起来不对。

当桌面视图失焦时,我可以让高光颜色更改,还是防止文字在焦点失焦时变暗?

2 个答案:

答案 0 :(得分:1)

当您在拆分视图中单击其他视图时,OS X会在行视图及其子视图上调用setBackgroundStyle。有趣的是,它似乎只发生在NSOutlineView上。

由于我已经准备好代码来处理选择行时将图像更改为不同的图像(以提高对比度),并且当我需要使用outlineViewSelectionDidChange和{{1时,我明确设置背景样式我将outlineViewSelectionIsChanging改为无操作,我制作了自己的自定义setter,它改变了setBackgroundStyle ivar。

看起来像这样:

_backgroundStyle

它只适用于我,因为我明确处理行改变他们的选择和AFAIK我不依赖操作系统的任何地方为我改变它。如果我能再做一次,我只是推动使用系统高亮颜色,在这种情况下,我可以免费获得此功能。

答案 1 :(得分:0)

正如您对答案的一个小贡献。这也适用于drawSelectionInRect实现产生的奇怪对比。这是一个Swift解决方案,也适用于NSTableCellView

    override var backgroundStyle: NSBackgroundStyle {
             get {
                 return self.backgroundStyle
            }

             set {

            }         
        }