¿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?

kbanman
fuente

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.

Haydn
fuente
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.

Mosib Asad
fuente
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

Manish Ahuja
fuente
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
26
adjustsImageWhenHighlighted = NO;
KETAN
fuente
23
button.adjustsImageWhenDisabled = NO;

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

Tim
fuente
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

Dimitris
fuente
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.

}
therealbuckley
fuente
3

Para el desarrollador Swifty:

yourButton.adjustsImageWhenHighlighted = false
iDeveloper
fuente
3

Swift 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false
yuanjilee
fuente
2

solo dos cosas:

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;
Alok
fuente
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í

Jeff
fuente
2

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

Khushboo
fuente
-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í

János
fuente