ios objective-c uibutton isenabled setuserinteractionenabled

iOS UIButton-Diferencia entre UIButton setUserInteractionEnabled y setEnabled



objective-c isenabled (3)

¡¡¡Espere!!!:
Sé que puede pensar que esta pregunta se ha formulado y respondido varias veces antes. Pero puedo garantizarle que esta pregunta es única.

Pregunta:
En una aplicación para iOS, solo imagine que hay dos botones, como se muestra en la imagen a continuación, y que tienen dos acciones que se comporta como una lógica de alternancia.

Y su lógica puede ser la siguiente:

- (IBAction)testBtnClicked:(id)sender { if ([self.testBtn isEnabled]) { [self.testBtn setEnabled:NO]; [self.setInteractionBtn setUserInteractionEnabled:YES]; } else { [self.testBtn setEnabled:YES]; [self.setInteractionBtn setUserInteractionEnabled:NO]; } } - (IBAction)setInteractionBtnClicked:(id)sender { if ([self.setInteractionBtn isEnabled]) { [self.setInteractionBtn setUserInteractionEnabled:NO]; [self.testBtn setEnabled:YES]; } else { [self.setInteractionBtn setUserInteractionEnabled:YES]; [self.testBtn setEnabled:NO]; } }

Así que no veo una gran diferencia entre el método setUserInteractionEnabled y el método setUserInteractionEnabled . Ellos mismos se comportan como un único método que bloquea al usuario al no dejar de usarlo. Sin embargo, si es igual, ¿cómo podríamos detectar isEnabled true o false incluso cuando setUserInteractionEnabled está configurado como False ?

Los siguientes son los motivos que hacen que esta pregunta no sea un posible duplicado de otro hilo de preguntas y respuestas en SO:

  • A pesar de que un código de alto rango puede haber marcado mi pregunta como un posible duplicado, esas preguntas y respuestas no me dieron la comprensión correcta.
  • Como @danh dijo,

    Al menos una razón es que durante la animación, la interacción del usuario está deshabilitada en UIViews. Sería incorrecto que los controles se dibujaran en gris mientras están animados. Entonces, al menos durante la animación, las dos propiedades tienen distintos significados. Me dio la respuesta real o la razón para ver que estos dos métodos son por dos razones. Porque cualquiera podría decir que setUserInteractionEnabled no hace cambios en el estado de la interfaz de usuario, pero al menos solo en la respuesta de @ danh había indicado que podría usarse implícitamente durante las animaciones de la interfaz de usuario.


Ellos son casi lo mismo. userInteractionEnabled es una propiedad de UIView que alterna si la vista recibe algún toque de usuario. enabled es una propiedad de UIControl (que es una subclase de UIView y una superclase de UIButton ) y tiene el mismo efecto. Una diferencia es que los controles UIKit pueden dibujarse de forma diferente dependiendo de su estado enabled , que no es el caso para el UIView abstracto.

De acuerdo, entonces ¿por qué?

Como UIControl subclases de UIControl heredan ambas, ¿por qué hay dos propiedades casi iguales? ¿Por qué los controles simplemente no descartan la idea de "habilitado" y se dibujan de forma diferente en función de su estado userInteractionEnabled ?

Al menos una razón es que durante la animación, la interacción del usuario está desactivada en UIView s. Sería incorrecto que los controles se dibujaran en gris mientras están animados. Entonces, al menos durante la animación, las dos propiedades tienen distintos significados.


Características de habilitado:

  • Es una propiedad de UIControl
  • Superclase para UIButton .
  • Tiene efectos sobre el estado visual del objeto y generalmente es el método preferido para deshabilitar un control

Características de la interacción de usuario habilitada:

  • Una propiedad de UIView
  • Es más probable que el código que interactúa con sus controles compruebe si los botones están enabled que si se configuró su propiedad userInteractionEnabled . Es más convencional.

@property(nonatomic, getter=isUserInteractionEnabled) BOOL userInteractionEnabled

Un valor booleano que determina si los eventos del usuario se ignoran y eliminan de la cola del evento. Cuando se establece en NO, los eventos del usuario, como el teclado y el tacto, destinados a la vista se ignoran y se eliminan de la cola de eventos. Cuando se establece en SÍ, los eventos se entregan a la vista normalmente. El valor predeterminado de esta propiedad es SÍ.

Discusión:

Durante una animación, las interacciones del usuario se desactivan temporalmente para todas las vistas involucradas en la animación, independientemente del valor de esta propiedad. Puede deshabilitar este comportamiento especificando la opción UIViewAnimationOptionAllowUserInteraction al configurar la animación.

Apple Doc en UIView

@property(nonatomic, getter=isEnabled) BOOL enabled

Un valor booleano que determina si el receptor está habilitado.

Discusión:

Especifique SÍ para habilitar el control; de lo contrario, especifique NO para desactivarlo. El valor predeterminado es SÍ. Si el estado habilitado es NO, el control ignora los eventos táctiles y las subclases pueden dibujar de forma diferente.

Para tu referencia:

  1. Apple Doc en UIControl
  2. SO Q & A

Como dice @danh:

"Al menos una razón es que durante la animación, la interacción del usuario está deshabilitada en UIViews. Sería incorrecto que los controles se dibujaran en grisáceo mientras están animados. Por lo tanto, al menos durante la animación, las dos propiedades tienen significados distintos".