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 propiedaduserInteractionEnabled
. 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.
@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:
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".