¿Cómo deshabilitar el estado de control de resaltado de un UIButton?


147

Tengo un UIButton que, cuando se selecciona, no debería cambiar de estado cuando se toca. El comportamiento predeterminado es que esté en UIControlStateHighlighted mientras se toca, y esto me está enojando.

Sugerencias?

Respuestas:


313

Su botón debe estar buttonTypeconfigurado en Personalizado.

En IB puede desmarcar "Resaltar ajusta imagen".

Programáticamente puedes usar theButton.adjustsImageWhenHighlighted = NO;

Opciones similares están disponibles para el estado "deshabilitado" también.


1
¿Alguna posibilidad de saber cuál sería la versión programática de esto? En este momento lo tengo funcionando hackishly deshabilitándolo, y disfrazándolo como seleccionado.
kbanman

99
uibutton.adjustsImageWhenHighlighted = NO;
Haydn

43
También asegúrese de que el tipo de botón esté configurado como PERSONALIZADO. (Como Mosib Asad mencionó en otra respuesta)
Vlad Lego

¡¡¡Excelente!!! solo un pequeño y obvio cambio que me perdí !!! Había configurado el tipo de clase UIButton en MyCustomClass, pero perdón por cambiar este. Por lo tanto, estaba dando un efecto resaltado de botón no seleccionado. Gracias otra vez.
Vinod Supnekar

38

Además de la respuesta anterior de desmarcar "resaltar ajusta imagen" en IB, asegúrese de que el tipo de botón esté configurado como PERSONALIZADO.


2
Esta era la pieza que faltaba: tipo de botón PERSONALIZADO. Gracias!
JOM

1
¿Qué sucede si me gustaría mantenerme como un sistema UIButton? ¿No puedo eliminar el resaltado ajusta la imagen?
Amjad Husseini

36

Esto funcionará para usted:

[button setBackgroundImage:[UIImage imageNamed:@"button_image"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected | UIControlStateHighlighted];

La tercera línea es el truco aquí ...

Esto funciona igual para configurar imagen / backgroundImage


1
Esto funciona perfecto para mi. La adjustsImageWhenHighlightedpropiedad de UIButtonparece afectar solo a la imagen de fondo.
Michael Thiel,

Tenga en cuenta que si decide asignar una imagen al 'estado deshabilitado', no llama a setBackgroundImage. En su lugar, debe hacer lo siguiente [button setImage: image forState: UIControlStateDisabled]; También tenga en cuenta que, como se menciona en este subproceso, la propiedadjustsImageWhenHighlighted UIButton solo afecta a la imagen de fondo.
HamasN


23
button.adjustsImageWhenDisabled = NO;

es igualmente útil para tener su propia apariencia de un botón deshabilitado.


5

Dependiendo de los cambios del estado predeterminado al botón resaltado, puede llamar a un par de métodos para configurarlos a lo que necesita. Entonces, si la imagen cambia, puedes hacer

[myButton setImage:[myButton imageForState:UIControlStateNormal] forState:UIControlStateHighlighted];

Si el texto cambia, puedes hacerlo

[myButton setTitle:[myButton titleForState:UIControlStateNormal] forState:UIControlStateHighlighted];

otras funciones similares:

- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state

- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state


setTitleColor es todo lo que necesitaba para desactivar el resaltado en el texto de
uibutton

3

OK, aquí hay una solución fácil si esto funciona para usted, después de una semana de golpearme la cabeza con esto finalmente se me ocurrió establecer resaltado = NO para la primera línea del método IBAction para TouchUpInside o TouchDown, o lo que sea que funcione. Para mí estuvo bien en TouchUpInside.

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}

3

Para el desarrollador Swifty:

yourButton.adjustsImageWhenHighlighted = false

3

Swift 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false

2

solo dos cosas:

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;

2

Tuve un problema similar y descubrí que "desmarcar" borra el contenido gráfico en el generador de interfaces solucionó mi problema

ingrese la descripción de la imagen aquí


2

haga que su botón Escriba - "Personalizado" y desactive - Resalte Ajustar imagen y ya está.


-3

evite establecer el salto de línea de UIButton en Clip , utilice en su lugar el Truncate Middle estándar

ingrese la descripción de la imagen aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.