Objective c 试图生成透明的NSTableView标头时,NSTableHeaderView和NSTableHeaderCell出现消息流问题

Objective c 试图生成透明的NSTableView标头时,NSTableHeaderView和NSTableHeaderCell出现消息流问题,objective-c,macos,cocoa,nstableheaderview,nstableheadercell,Objective C,Macos,Cocoa,Nstableheaderview,Nstableheadercell,问题:我正在尝试创建一个自定义的透明TableView标题,并且在NSTableHeaderCell子类中创建了NSTableHeaderCell的子类,并覆盖了-drawWithFrame:inView和-drawInteriorWithFrame:inView。这些方法按预期工作,但仅在首次绘制表列标题时工作。但是,在用户单击表格标题后,它将以白色背景重新绘制。要了解具体情况,以下是自定义方法实现: @interface MYTableHeaderCell : NSTableHeaderCe

问题:我正在尝试创建一个自定义的透明
TableView
标题,并且在
NSTableHeaderCell
子类中创建了
NSTableHeaderCell
的子类,并覆盖了
-drawWithFrame:inView
-drawInteriorWithFrame:inView
。这些方法按预期工作,但仅在首次绘制表列标题时工作。但是,在用户单击表格标题后,它将以白色背景重新绘制。要了解具体情况,以下是自定义方法实现:

@interface MYTableHeaderCell : NSTableHeaderCell
@end

@implementation MYTableHeaderCell

-(void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView{
//[super drawWithFrame:cellFrame inView:controlView];
NSBezierPath *path = [NSBezierPath bezierPathWithRect:cellFrame];
NSColor *clearColor = [NSColor clearColor];
[clearColor setFill];
[path fill];
[self drawInteriorWithFrame:cellFrame inView:controlView];
}

-(void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView{
//[super drawInteriorWithFrame:cellFrame inView:controlView];
NSBezierPath *path = [NSBezierPath bezierPathWithRect:cellFrame];
NSColor *clearColor = [NSColor clearColor];
[clearColor setFill];
[path fill];
NSRect titleRect = [self titleRectForBounds:cellFrame];
[self.attributedStringValue drawInRect:titleRect];
}

-(NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView{
return [NSColor clearColor];
}

-(BOOL)isOpaque{
return NO;
}
首次绘制表视图标题时,它将 但是,在单击标题后,它是

据我所知,在单击表视图标题之后

-drawInteriorWithFrame:inView: 
当需要绘制标头时仍调用。但是,

-drawWithFrame:inView: 
事实并非如此。另一个类似乎正在单元格文本下方绘制白色视图

我已经浏览了
NSTableHeaderCell
NSTableHeaderView
类描述以及它们的所有
超类
,但我不明白为什么要绘制白色背景。我显然错过了一些基本的东西

问题:是什么导致绘制白色视图?

highlight(flag: Bool, withFrame cellFrame: NSRect, inView controlView: NSView)

方法未实现。重写此方法并从其中的drawRect方法复制代码,这应该完成。

您是选择列还是对列进行排序?关闭
allowsColumnSelection
或尝试覆盖
高亮显示:withFrame:inView: