问题:我正在尝试创建自定义透明TableView
标头,我创建了NSTableHeaderView
和NSTableHeaderCell
的子类并覆盖了-drawWithFrame:inView
和-drawInteriorWithFrame:inView
子类中的NSTableHeaderCell
。这些方法按预期工作,但仅在首次绘制表列标题时才有效。但是,在用户单击表标题后,它将以白色背景重新绘制。为了具体,以下是自定义方法实现:
@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;
}
首次绘制表格视图标题时,它 has a transparent background as intended. 然而,点击标题之后,它就是 redrawn to have a white background.
据我所知,点击表格视图标题后
-drawInteriorWithFrame:inView:
需要绘制标题时仍会调用。但是,
-drawWithFrame:inView:
不是。另外一个类似乎是在单元格文本下面绘制一个白色视图。
我查看了NSTableHeaderCell
和NSTableHeaderView
课程说明及其所有superclasses
,但我无法弄清楚为什么要绘制白色背景。我显然缺少一些基本的东西。
问题:是什么导致绘制白色视图?
答案 0 :(得分:0)
highlight(flag: Bool, withFrame cellFrame: NSRect, inView controlView: NSView)
方法未实现。重写此方法并从那里的drawRect方法中复制代码,这应该完成。