2011-06-18 7 views
5

Cuando configuro mis botones como deshabilitados, el texto se vuelve gris (antes era negro). En mi ventana, el resultado es que el texto no se puede leer cuando el botón está desactivado.¿Hay alguna manera de evitar que el texto se vuelva gris cuando desactivo un botón?

Revisé todo en la documentación de NSButton/NSButtonCell/NSCell/NSControl, pero no encontré ninguna manera de mantener el texto en negro. ¿Sabes cómo puedo hacer eso?

+0

Podría anular las propiedades del botón en lugar de desactivarlo - pero desactivar la interacción quizás o simplemente cambie el color/borde del botón para que conserve su color de texto? Solo me preguntaba si habías probado esta solución, sé lo que dices. – Luke

+0

mmmm ... supongo que puedo configurar la imagen/imagen alternativa en la misma máscara "deshabilitada" para que el usuario entienda que está deshabilitada. Pero hará que el código sea muy feo - tendría que verificar cada función de acción si el botón está desactivado o no –

+0

En iOS, puedo hacer esto: myButton.userInteractionDisabled = YES y luego configurar el alfa para darle la apariencia de estar deshabilitado Me imagino que puedes hacer algo similar con tu NSButton. Solo para confirmar, simplemente estaba estableciendo la propiedad habilitada en NO, ¿de dónde viene el problema de color del texto? – Luke

Respuesta

1

Puede establecer propiedades de botones (fuente, colores) para cada estado en IB. Entonces, ¿establecería el color del texto para el estado desactivado en negro?

+0

No veo esa opción en IB. Yo uso xcode 4 con construido en IB –

+0

No es cocoa el toque de cacao. – Kappe

-1

En contacto cacao no es un API para que:

[myButton SetTextColor: [UIColor blackcolor] forState: UIControlStateDisabled];

Para el cacao No lo sé.

+4

Eso soluciona el problema de Cocoa Touch, pero no de Cocoa, que es lo que pregunta el interlocutor. –

+0

Me perdí eso, gracias por señalar –

0

Subclase NSButtonCell y asignarlo a su botón CELL en IB (no el BOTÓN directamente -> un nivel más profundo). En la subclase implementar el siguiente y actualiza el tamaño, tipo de letra y color a su gusto:

- (NSAttributedString*)attributedTitleForString:(NSString*)string 
{ 
    // Colors 
    NSColor *disabledColor = [NSColor grayColor]; 
    NSColor *enabledColor = [NSColor redColor]; 

    // Font 
    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init]; 
    [style setAlignment:NSLeftTextAlignment]; 
    NSFont *font = [NSFont systemFontOfSize:11]; 

    // Enabled 
    NSDictionary *enabledAttrsDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
             enabledColor, NSForegroundColorAttributeName, 
             style, NSParagraphStyleAttributeName, 
             font, NSFontAttributeName, 
             nil]; 
    NSAttributedString* enabledTitle = [[NSAttributedString alloc]initWithString:string attributes:enabledAttrsDictionary]; 

    // Disabled 
    NSDictionary *disabledAttrsDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
             disabledColor, NSForegroundColorAttributeName, 
             style, NSParagraphStyleAttributeName, 
             font, NSFontAttributeName, nil]; 

    NSAttributedString* disabledTitle = [[NSAttributedString alloc]initWithString:string attributes:disabledAttrsDictionary]; 

    if (![self isEnabled]) 
     return disabledTitle; 
    else 
     return enabledTitle; 
} 

EDIT: Sólo funciona si setWantsLayers es falsa

Cuestiones relacionadas