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'seventos ValueChanged:de llamada continuously  mientras estoy a cambio Onde Offo Offen 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
BOOLque almacene el estado anterior delUISwitchy 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.selectedpropiedad 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.hCustomSwitch.mEstamos 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,
UISwitchasí que encontré una solución temporal. Encontré unogitHubpersonalizadoKLSwitchuso 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
.TouchUpInsidelugar de.ValueChangedfunciona 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
onaon. Aquí está mi solución simple:¡Solo asegúrese de configurar también
self.lastSwitchStatecada 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