所以這有點棘手。策略是在NSTableCellView中使用alpha小於1的疊加彩色視圖,然後根據單元的選擇來添加和刪除它。
首先,你需要,可以設置背景顏色的的NSView:
NSView_Background.h
@interface NSView_Background : NSView
@property (nonatomic, strong) NSColor *background;
@end
NSView_Background.m
#import "NSView_Background.h"
@implementation NSView_Background
- (void)drawRect:(NSRect)dirtyRect {
[self.background set];
NSRectFill([self bounds]);
}
- (void)setBackground:(NSColor *)color {
if ([_background isEqual:color]) return;
_background = color;
[self setNeedsDisplay:YES];
}
@end
二,在你NSTableCellView子類,添加NSView_Background屬性:
#import "NSView_Background.h"
@interface
@property (nonatomic, strong) NSView_Background *selectionView;
@end
三,這種方法添加到NSTableCellView子類:
- (void)shouldShowSelectionView:(BOOL)shouldShowSelectionView {
if (shouldShowSelectionView) {
self.selectionView = [[NSView_Background alloc] init];
[self.selectionView setBackground:[NSColor grayColor]];
self.selectionView.alpha = 0.4;
[self addSubview:self.selectionView];
[self setNeedsDisplay:YES]; // draws the selection view
} else {
[self.selectionView removeFromSuperview];
self.selectionView = nil;
}
}
四,在你NSTableCellView子類這增加的drawRect:
- (void)drawRect:(NSRect)dirtyRect {
if (self.selectionView)
self.selectionView.frame = self.bounds;
}
Final LY,覆蓋NSTableCellView:setBackgroundStyle:
- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle {
switch (backgroundStyle) {
case: NSBackgroundStyleDark:
[self shouldShowSelectionView:YES];
break;
default:
[self shouldShowSelectionView:NO];
break;
}
}
我知道這似乎哈克,但這是我能得到這種行爲的唯一途徑。希望這會有所幫助,祝你好運!
完美,真的非常感謝您的幫助。 – melody5417
如果這回答你的問題,請接受這個答案。 – rocky
對不起,但我已經接受了這個答案。我點擊了uparrow,那麼這個答案將被標記爲接受,對嗎?對不起,如果這不是正確的方法,我會糾正它。 – melody5417