Pregunta

Estoy tratando de subclase NSCell para dibujar un fondo personalizado a destacar.La documentación parece sugerir que la principal highlight:withFrame:inView: debería permitirme hacer esto, pero el método no se llama nunca.

En lugar de eso, he anulado drawInteriorWithFrame:inView: que funciona bien - puedo dibujar lo que quiero en la celda.Sin embargo, el problema es que tengo que dibujar todo por mí mismo, perder la funcionalidad del tipo de NSCell estoy extendiendo - por ejemplo, un NSTextFieldCell la capacidad de visualización de texto:

Personalizado dibujado celda resaltada:

enter image description here

Sin embargo, sólo quiero volver a dibujar el fondo (el resaltado), y retener la capacidad para utilizar la funcionalidad principal de la extensión de la célula:

enter image description here

Yo podría, por supuesto, sólo dibuja el texto a mí también, pero tengo la esperanza de que hay una forma más fácil de hacer esto.

Cualquier ayuda es muy apreciada.

¿Fue útil?

Solución

Gracias a la ayuda de @Bavarious he conseguido resolverlo.Mi gran NSTextFieldCell implementación de la clase ahora contiene:

-(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];
}

La clave es asegurarse de que usted regrese nil para highlightColorWithFrame:inView: para detener drawInteriorWithFrame:inView: dibujo de fondo y, sin embargo, sigue llamando a dibujar el contenido principal (en este caso el texto).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top