2011-08-30 4 views

Respuesta

6
[mBtn setTintColor:[UIColor grayColor]]; 

Esto solo afecta al estado resaltado, por lo que creo que esto es lo que está buscando.

También puede configurarlo desde el Generador de interfaces, en el menú desplegable Destacar matiz.

+0

Esto no funciona, me sale 'UIButton' puede no responder a '-setTintColor:' 'UIButton' puede no responder a 'setTintColor:' – Syntax

+0

Tienes razón, lo revisé de nuevo, y esto solo funciona para iOS 5.0 y más tarde. En este caso, deberá crear un UIView, establecer su color de fondo y usar esta vista como imagen de fondo para el estado resaltado. – antalkerekes

+0

Eso está bien, voy a dar una oportunidad al iOS 5. – Syntax

0

no hay un método como este, setBackgroundColor: forState:

documentación Check. necesitas usar imagen

+1

Eso es un poco tonto, tener que cargar una imagen solo por un cambio de color. – Syntax

+0

@syntax Lo siento hermano, entonces no tienes otra opción. – Ishu

10

Estoy respondiendo a este hilo antiguo porque aparece constantemente en la búsqueda de una solución a este problema y no he visto ninguna solución en otro lugar. Es realmente molesto que setTintColor solo se aplique al estado resaltado de un UIButton. Hace seis meses, era igualmente molesto que se aplicara solo a iOS 5, pero es de esperar que sea un problema menor en el futuro. Con esto en mente, he recurrido y combinado varias sugerencias de la comunidad para componer una solución de propósito general para teñir un grupo de botones en su estado normal.

El siguiente método acepta un NSArray de UIButtons y un conjunto de especificaciones de color como entrada. Aplica las especificaciones de color a un botón usando setTintColor, representa el resultado en un UIImage y aplica esa imagen como imagen de fondo de todo el conjunto de botones. Esto evita la necesidad de crear archivos de imagen discretos para los colores de los botones. Además, lo hace usando una imagen extensible para que funcione con una colección de botones de diferentes tamaños (aunque tenga en cuenta que asume los factores de redondeo de esquina predeterminados de UIButton). Espero que lo encuentres útil para los objetivos de iOS 5.

- (void) setColorOfButtons:(NSArray*)buttons red:(float)red green:(float)green blue:(float)blue alpha:(float)alpha { 

    if (buttons.count == 0) { 
     return; 
    } 

    // get the first button 
    NSEnumerator* buttonEnum = [buttons objectEnumerator]; 
    UIButton* button = (UIButton*)[buttonEnum nextObject]; 

    // set the button's highlight color 
    [button setTintColor:[UIColor colorWithRed:red/255.9999f green:green/255.9999f blue:blue/255.9999f alpha:alpha]]; 

    // clear any existing background image 
    [button setBackgroundImage:nil forState:UIControlStateNormal]; 

    // place the button into highlighted state with no title 
    BOOL wasHighlighted = button.highlighted; 
    NSString* savedTitle = [button titleForState:UIControlStateNormal]; 
    [button setTitle:nil forState:UIControlStateNormal]; 
    [button setHighlighted:YES]; 

    // render the highlighted state of the button into an image 
    UIGraphicsBeginImageContext(button.layer.frame.size); 
    CGContextRef graphicsContext = UIGraphicsGetCurrentContext(); 
    [button.layer renderInContext:graphicsContext]; 
    UIImage* image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIImage* stretchableImage = [image stretchableImageWithLeftCapWidth:12 topCapHeight:0]; 
    UIGraphicsEndImageContext(); 

    // restore the button's state and title 
    [button setHighlighted:wasHighlighted]; 
    [button setTitle:savedTitle forState:UIControlStateNormal]; 

    // set background image of all buttons 
    do { 
     [button setBackgroundImage:stretchableImage forState:UIControlStateNormal]; 
    } while (button = (UIButton*)[buttonEnum nextObject]);  
} 
+1

tenga en cuenta que '[button titleForState: UIControlStateNormal]' puede devolver un objeto no válido cuando no está establecido (por ejemplo, al trabajar con IB), para mí cambiar esta línea a 'NSString savedTitle = [button titleLabel] .text;' funciona, por lo que Puede que quiera agregar un cheque aunque no estoy seguro de qué cheque debe estar allí (porque NO devuelve nada, devuelve un objeto INVALIDO y se bloquea si el título no está establecido) –

+0

Gracias por el Tipp ishaq. Estaba enfrentando exactamente el mismo problema ... –

4

sólo para las personas que aterrizará aquí como yo lo hice cuando se busca cambiar los colores de fondo para el estado resaltado ...

que terminó con una subclase UIButton que tiene una propiedad de backgroundHighlightColor y pistas destacando a través KVO. Aquí está el enlace a GitHub: SOHighlightButton

Debería ser capaz de adaptarlo a cualquier otro escenario si necesita más/otras propiedades del UIButton para cambiar si está resaltado.

Cuestiones relacionadas