Pergunta
Estou tentando subclassificar NSCell
para desenhar um destaque de fundo personalizado.A documentação parece sugerir que a prioridade highlight:withFrame:inView:
deve me permitir fazer isso, mas o método nunca é chamado.
Em vez disso, eu substituí drawInteriorWithFrame:inView:
o que funciona bem - posso desenhar o que quiser na célula.No entanto, o problema é que tenho que desenhar tudo sozinho, perdendo a funcionalidade do tipo de NSCell que estou estendendo - por exemplo, a capacidade de um NSTextFieldCell de exibir texto:
Célula destacada desenhada personalizada:
No entanto, quero apenas redesenhar o plano de fundo (o destaque) e manter a capacidade de usar a funcionalidade principal da célula estendida:
Eu poderia, é claro, desenhar o texto sozinho, mas espero que haja uma maneira mais fácil de fazer isso.
Qualquer ajuda é muito apreciada.
Solução
Graças à ajuda de @Bavarious consegui resolver isso.Minha implementação estendida da classe NSTextFieldCell agora contém:
-(NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
return nil;
}
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
if ([self isHighlighted]) {
// Draw highlight background here
}
[super drawInteriorWithFrame:cellFrame inView:controlView];
}
A chave é ter certeza de que você retornará nil
para highlightColorWithFrame:inView:
parar drawInteriorWithFrame:inView:
desenhando um plano de fundo e ainda assim chamando-o para desenhar o conteúdo principal (neste caso, texto).