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:

enter image description here

No entanto, quero apenas redesenhar o plano de fundo (o destaque) e manter a capacidade de usar a funcionalidade principal da célula estendida:

enter image description here

Eu poderia, é claro, desenhar o texto sozinho, mas espero que haja uma maneira mais fácil de fazer isso.

Qualquer ajuda é muito apreciada.

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top