Проблемы потока сообщений с NSTableHeaderView и NSTableHeaderCell при попытке создать прозрачный заголовок NSTableView

Проблема: я пытаюсь создать собственный прозрачный 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;
}

Когда заголовок табличного представления отрисовывается впервые, он имеет прозрачный фон, как и предполагалось. Однако после нажатия на заголовок он перерисовывается на белом фоне.

Насколько я могу сказать, после нажатия на заголовок представления таблицы

-drawInteriorWithFrame:inView: 

по-прежнему вызывается, когда необходимо нарисовать заголовок. Тем не мение,

-drawWithFrame:inView: 

не является. Также кажется, что другой класс рисует белый вид под текстом ячейки.

Я посмотрел через NSTableHeaderCell а также NSTableHeaderView описания классов вместе со всеми их superclasses но я не могу понять, почему белый фон рисуется. Я явно упускаю что-то фундаментальное.

Вопрос: Что заставляет рисовать белый вид?

1 ответ

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

метод не реализован. Переопределите этот метод и скопируйте ваш код из вашего метода drawRect, и это должно быть сделано.

Другие вопросы по тегам