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