Проблемы потока сообщений с 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, и это должно быть сделано.