我在左窗格中有一个带有表视图的NSSplitView。我注意到,当我在左窗格中选择一个项目并将焦点更改为右窗格时,左窗格将失去焦点,突出显示的行的突出显示颜色变为灰色,文本变为黑色。
我通过覆盖drawSelectionInRect
NSTableRowView覆盖了突出显示颜色。这样,突出显示的颜色将保持相同的自定义颜色,但是文本将变暗,这看起来是错误的。
我可以在表格视图不清晰时让突出显示颜色改变,还是在焦点不清晰时防止文本变暗?
当您在拆分视图中单击另一个视图时,似乎OS X在行视图及其子视图上调用setBackgroundStyle。有趣的是,它似乎只发生在NSOutlineView上。
因为我有一些代码已经到位处理时选择行(用于改善对比度),而且我明确地设置背景风格,当我需要用改变我的图像不同的图像outlineViewSelectionDidChange
和outlineViewSelectionIsChanging
我重写setBackgroundStyle
是一个空操作,我做了我自己的自定义设置器,它改变了_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
它仅对我有用,因为我明确地处理了更改其选择和AFAIK的行,而我并没有依赖于操作系统为我进行更改。如果我能再做一次,我只会要求使用系统突出显示颜色,在这种情况下,我将免费获得此功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句