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