Editar
Ahora está arreglado ios7.1
No hagas ningún ajuste para solucionarlo.
Editar2
Al parecer, vuelve a ocurrir el mismo problema en iOS 8.0 y 8.1
Editar3
Ahora está arreglado ios9.2
No hagas ningún ajuste para solucionarlo.
Hola Hoy he visto en UISwitch's
eventos ValueChanged:
de llamada continuously
mientras estoy a cambio On
de Off
o Off
en On y mi dedo se movió todavía en el lado derecho, así como el lado izquierdo. Asistí a la imagen GIF para obtener más claridad con NSLog.
Mi método de cambio de valor es:
- (IBAction)changeSwitch:(id)sender{
if([sender isOn]){
NSLog(@"Switch is ON");
} else{
NSLog(@"Switch is OFF");
}
}
iOS6 el mismo código de Switch funcionando bien como esperábamos:
Entonces, ¿alguien puede sugerirme que llame solo una vez a su estado Activado o desactivado? o esto es un error o qué ..?
ACTUALIZAR
Aquí está mi demostración:
Respuestas:
Consulte el siguiente código:
fuente
El mismo error aquí. Creo que he encontrado una solución sencilla. Solo tenemos que usar un nuevo
BOOL
que almacene el estado anterior delUISwitch
y una instrucción if en nuestroIBAction
(Valor cambiado activado) para verificar que el valor del conmutador realmente haya cambiado.No más comportamientos extraños. Espero eso ayude.
fuente
Se puede utilizar el
UISwitch
's.selected
propiedad para asegurarse de que su código sólo se ejecuta una vez cuando cambia el valor real. Creo que esta es una gran solución porque evita tener que crear una subclase o agregar nuevas propiedades.Y aquí está en Swift:
fuente
Si está utilizando tantos interruptores en su aplicación, entonces hay un problema para cambiar el código en todos los lugares donde se define el método de acción t de UISwitch. Puede hacer un cambio personalizado y manejar los eventos solo si el valor cambia.
CustomSwitch.h
CustomSwitch.m
Estamos ignorando los eventos si el valor es el mismo que el valor cambiado. Ponga CustomSwitch en toda la clase de UISwitch en el guión gráfico. Esto resolverá el problema y llamará al objetivo solo una vez cuando el valor cambie
fuente
Tengo muchos usuarios que enfrentan el mismo problema, por lo que puede ser un error,
UISwitch
así que encontré una solución temporal. Encontré unogitHub
personalizadoKLSwitch
uso esto por ahora, espero que Apple solucione esto en la próxima actualización de xCode: -https://github.com/KieranLafferty/KLSwitch
fuente
Si no necesita reaccionar instantáneamente al cambio de valor del interruptor, lo siguiente podría ser una solución:
fuente
Este problema todavía está aquí a partir de la versión beta de iOS 9.3. Si no le importa que el usuario no pueda arrastrar fuera del interruptor, creo que usar en
.TouchUpInside
lugar de.ValueChanged
funciona de manera confiable.fuente
Todavía tengo el mismo problema en iOS 9.2
Tengo una solución y me hago pasar por eso que podría ayudar a otros
Crear una variable de recuento para rastrear el número de veces que el método recibió una llamada
Guardar el valor bool para el valor de cambio
En el método de cambio de valor de Switch, realice la acción deseada solo para la primera llamada al método. Cuando el valor del interruptor cambia nuevamente, establece el valor de conteo y el valor de la variable bool a los predeterminados
fuente
Este problema me atormenta cuando ato el cambio a otros comportamientos. Generalmente, a las cosas no les gusta ir del
on
aon
. Aquí está mi solución simple:¡Solo asegúrese de configurar también
self.lastSwitchState
cada vez que cambie manualmentemySwitch.on
! :)fuente
Este tipo de problema a menudo es causado por ValueChanged. No es necesario presionar el botón para que se ejecute la función. No es un evento táctil. Cada vez que cambia programáticamente el interruptor a encendido / apagado, el valor cambia y vuelve a llamar a la función IBAction.
@RoNiT tuvo la respuesta correcta con:
Rápido
fuente
Esto funciona bien y no vuelve a llamar a la función de selector.
fuente
Esto funcionó para mí.
fuente