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
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
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 –
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