Me gustaría tener una subclase de NSSegmentedControl donde los distintos segmentos sean de diferentes colores. He intentado crear subclases NSSegmentedControl y añadiendo el siguiente código:NSSegmentedControl Colors
- (void)drawRect:(NSRect)dirtyRect
{
NSColor *color = [NSColor redColor];
[color setFill];
NSRectFill(dirtyRect);
[super drawRect:dirtyRect];
}
Eso parece estar cerca excepto que los colores 1. segmenta el conjunto de control del mismo color, rojo en este caso, y 2. no hay un poco de color sangra en los bordes.
También probé la subclasificación NSSegmentedCell y añadiendo esto:
- (void)drawSegment:(NSInteger)segment inFrame:(NSRect)frame withView:(NSView *)controlView
{
NSColor *color;
switch (segment) {
case 0:
color = [NSColor redColor];
break;
case 1:
color = [NSColor blueColor];
break;
case 2:
color = [NSColor greenColor];
break;
case 3:
color = [NSColor orangeColor];
break;
default:
break;
}
[color setFill];
NSRectFill(frame);
[super drawSegment:segment inFrame:frame withView:controlView];
}
Esto es mejor que en los diversos segmentos están mostrando colores únicos, sin embargo yo no consideraría esto aceptable. Quiero que se complete el segmento completo con el color apropiado para ese segmento y sería bueno si tuviera el degradado y el sombreado como en la primera captura de pantalla.
Háganme saber cómo puedo lograr esto.
Gracias.
Eres Afligiendo que la implementación actual del control segmentado usa translucidez en su dibujo. Esto permite que el rojo que está pintando debajo del control brille. Eso podría cambiar con cualquier actualización de Mac OS X. Para hacer esto correctamente, debe crear su propia subclase NSView que haga todo el dibujo en drawRect: en lugar de intentar matizar el control existente. –
Oh, Jon, posiblemente relacionado con lo que dices, en realidad hay alrededor de media docena de estilos diferentes. Me pregunto cómo los otros estilos también podrían afectar esto. –