cocoa - 防止 NSTableRowView 在未聚焦时更改突出显示?

标签 cocoa nstableview

我有一个 NSSplitView,其左侧 Pane 中有一个 TableView 。我注意到,当我在左 Pane 中选择一个项目并将焦点更改到右 Pane 时,左 Pane 会失去焦点,突出显示的行的突出显示颜色会变成灰色,文本会变成黑色。

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

我可以在表格 View 失焦时让突出显示颜色发生变化,或者防止文本在失焦时变暗吗?

最佳答案

当您单击 Split View中的另一个 View 时,OS X 似乎会在行 View 及其 subview 上调用 setBackgroundStyle。有趣的是,这似乎只发生在 NSOutlineView 上。

因为我已经有了代码来处理在选择行时将图像更改为不同的图像(以提高对比度),并且当我需要使用 outlineViewSelectionDidChange 和时,我显式设置背景样式outlineViewSelectionIsChanging 我重写了 setBackgroundStyle 使其成为无操作,并制作了自己的自定义 setter 来更改 _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

它只对我有用,因为我正在显式处理更改其选择的行,并且据我所知,我不依赖操作系统为我更改它。如果我可以再次这样做,我只会插入使用系统突出显示颜色,在这种情况下我可以免费获得此功能。

关于cocoa - 防止 NSTableRowView 在未聚焦时更改突出显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35051359/

相关文章:

NSTableView 单元格中的 cocoa NSView

cocoa - 获取 NSTableView 中的托管对象

cocoa - tvOS applicationDidBecomeActive 在电视关闭时重复调用

cocoa - 为gdb创建NSTask

objective-c - 基于 View 的 NSTableView 具有 float 组行

objective-c - 如何获取NSTableView动画委托(delegate)事件?

objective-c - 基于 NSStrings 的 NSTableView 行高

cocoa - 具有自动保存功能的 CoreData 第一次保存,然后在所有后续自动保存中崩溃并显示 "NoSuchFileError"

cocoa - 禁用的圆形纹理 NSButton 中的文本不会变灰

objective-c - 遍历对象的 NSMutableArray