0

问题:我正在尝试创建一个自定义透明TableView页眉,并且我已经创建了 and 的子类,NSTableHeaderView并且在子类中NSTableHeaderCell覆盖了-drawWithFrame:inViewand 。这些方法按预期工作,但仅在第一次绘制表格列标题时。然而,在用户单击表头后,它会以白色背景重新绘制。具体来说,这里是自定义方法实现:-drawInteriorWithFrame:inViewNSTableHeaderCell

@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: 

不是。似乎另一个类正在单元格文本下方绘制一个白色视图。

我已经查看了NSTableHeaderCellNSTableHeaderView类描述以及它们的所有描述,superclasses但我无法弄清楚为什么要绘制白色背景。我显然错过了一些基本的东西。

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

4

1 回答 1

0

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

方法没有实现。覆盖此方法并从那里的 drawRect 方法中复制您的代码,这应该完成。

于 2016-02-19T22:08:25.453 回答