Cocoa 防止NSTableRowView在不对焦时更改高亮显示?

Cocoa 防止NSTableRowView在不对焦时更改高亮显示?,cocoa,nstableview,Cocoa,Nstableview,在左窗格中有一个NSSplitView和一个表视图。我注意到,当我在左窗格中选择了一个项目并将焦点更改为右窗格时,左窗格会失去焦点,突出显示的行的突出显示颜色变为灰色,文本变为黑色 我通过在NSTableRowView中覆盖DrawSelectionDirect来覆盖高亮显示颜色。通过这样做,高亮显示颜色保持相同的自定义颜色,但文本变暗,这看起来是错误的 我可以在表格视图失焦时更改高亮显示颜色,还是在文本失焦时防止文本变暗?在拆分视图中单击另一个视图时,OS X似乎会在行视图及其子视图上调用se

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

我通过在NSTableRowView中覆盖
DrawSelectionDirect
来覆盖高亮显示颜色。通过这样做,高亮显示颜色保持相同的自定义颜色,但文本变暗,这看起来是错误的


我可以在表格视图失焦时更改高亮显示颜色,还是在文本失焦时防止文本变暗?

在拆分视图中单击另一个视图时,OS X似乎会在行视图及其子视图上调用setBackgroundStyle。有趣的是,这似乎只发生在纳维身上

因为我已经有了代码,可以在选择行时将图像更改为不同的图像(以提高对比度),当我需要使用
outlineViewSelectionDidChange
outlineViewSelectionIsChanging
时,我明确地设置了背景样式,我将
setBackgroundStyle
改写为no-op,并且我制作了自己的自定义setter,更改了
\u backgroundStyle
ivar

看起来是这样的:

@implementation TextFieldWithHighlighting
@synthesize backgroundStyle = _backgroundStyle;
- (NSBackgroundStyle) backgroundStyle {
    return _backgroundStyle;
}
@synthesize secretBackgroundStyle = _secretBackgroundStyle;
- (NSBackgroundStyle) secretBackgroundStyle {
    return _backgroundStyle;
}

- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle {

}

- (void) setSecretBackgroundStyle:(NSBackgroundStyle)secretBackgroundStyle {
    _backgroundStyle = secretBackgroundStyle;
    self.needsDisplay = YES;
}


- (void)drawRect:(NSRect)dirtyRect {
    if(_backgroundStyle == NSBackgroundStyleDark) {
        if(self.originalTextColor == nil) {
            self.originalTextColor = self.textColor;
        }
        self.textColor = [NSColor whiteColor];
    } else {
        if(self.originalTextColor) {
            self.textColor = self.originalTextColor;
        } else {
            self.textColor = [NSColor colorWithCalibratedRed:0x40/255.0 green:0x40/255.0 blue:0x41/255.0 alpha:0xFF/255.0];
        }
    }
    [super drawRect:dirtyRect];

}

@end

它只对我有效,因为我正在显式地处理更改其选择的行,而且我不依赖操作系统为我更改它。如果我可以再做一次,我只想推动使用系统高亮颜色,在这种情况下,我可以免费获得此功能。

这只是对您答案的一点小小贡献。这也适用于
drawselectiondirect
实现生成的奇怪对比。这里有一个Swift解决方案,它也可以在
NSTableCellView
中实现:

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

             set {

            }         
        }

NSTableRowView
NSTableCellView
的文本字段子视图?假设您有一个基于视图的表视图,您有什么样的视图来绘制内容?它是
NSTableCellView
的子视图。视图只是我在IB中拼凑的东西。@Aaron不要使用
textField
-outlet of
NSTableCellView
。改用另一个。@Astoria我试了一下,但文字颜色还是变了。这就好像当焦点移离焦点时,高光样式会发生变化。