2011-06-16 10 views

Respuesta

-3

Puede ajustar texto, imagen, colores, fuentes, etc., para diferentes estados de un botón: normal, resaltado, discapacitados, etc.

Usted puede hacer que en Interface Builder, cambiando el estado con el desplegable lista.

+0

no puedo encontrar esta opción en IB –

+4

No es el caso para los colores nsbutton. –

+0

@ErikSapir - Desde que aceptó esta respuesta, supongo que encontró dónde está IB. ¿Puedes compartirlo con el resto de nosotros? – pepsi

24

Usted puede subclase NSButtonCell y reemplazar un método:

- (NSRect)drawTitle:(NSAttributedString *)title withFrame:(NSRect)frame inView:(NSView *)controlView 
{ 
    if (![self isEnabled]) { 
     return [super drawTitle:[self attributedTitle] withFrame:frame inView:controlView]; 
    } 

    return [super drawTitle:title withFrame:frame inView:controlView]; 
} 

De esta manera, cuando el botón está desactivado, el texto tendrá el mismo color del texto cuando se activa el botón.

+0

Esta parece ser la mejor solución. – jrc

+0

¡Gracias! esto funciona bien! – Tommy

7

También puedes ver este

[btnInfo.cell setImageDimsWhenDisabled:NO]; 
+0

Esto funciona para mí. Esta es la mejor respuesta real. – Mazyod

+2

no funciona conmigo, el color del texto se atenúa –

2

Puede anular un método privado en NSButtonCell:

- (BOOL)_textDimsWhenDisabled { 
    return NO; 
} 

- (BOOL)_shouldDrawTextWithDisabledAppearance { 
    return NO; 
} 

Llené un radar para un método público: rdar: // 19218619

0

Actualización para swift 4:

override func drawTitle(_ title: NSAttributedString, withFrame frame: NSRect, in controlView: NSView) -> NSRect { 

    if !self.isEnabled { 
     return super.drawTitle(self.attributedTitle, withFrame: frame, in: controlView) 
    } 

    return super.drawTitle(title, withFrame: frame, in: controlView) 
    } 

Esto hará que los atributos de texto sean los mismos que cuando el botón está habilitado.

Cuestiones relacionadas