Éditer
C'est maintenant fixé sur ios7.1
Ne faites aucun ajustement pour le réparer.
Modifier2
Apparemment, le même problème se reproduit dans iOS 8.0 et 8.1
Modifier3
C'est maintenant fixé sur ios9.2
Ne faites aucun ajustement pour le réparer.
Salut Aujourd'hui , j'ai vu dans l' UISwitch's
événement d' ValueChanged:
appel continuously
alors que je suis changement On
de Off
ou Off
sur Activé et mon doigt déplacé encore sur le côté droit, ainsi que le côté gauche. J'ai atteché l'image GIF pour plus de clarté avec NSLog.
Ma méthode de changement de valeur est:
- (IBAction)changeSwitch:(id)sender{
if([sender isOn]){
NSLog(@"Switch is ON");
} else{
NSLog(@"Switch is OFF");
}
}
iOS6 le même code de Switch fonctionne bien comme prévu:
donc quelqu'un peut-il me suggérer cet appel une seule fois son état activé ou désactivé. ou est-ce un bug ou quoi ..?
METTRE À JOUR
Voici ma démo de celui-ci:
Réponses:
Veuillez consulter le code suivant:
la source
Même bug ici. Je pense avoir trouvé une solution de contournement simple. Nous devons simplement utiliser un nouveau
BOOL
qui stocke l'état précédent duUISwitch
et une instruction if dans notreIBAction
(Value Changed fired) pour vérifier que la valeur du commutateur a réellement changé.Plus de comportements bizarres. J'espère que ça aide.
la source
Vous pouvez utiliser la propriété
UISwitch
's.selected
pour vous assurer que votre code ne s'exécute qu'une seule fois lorsque la valeur réelle change. Je pense que c'est une excellente solution car cela évite d'avoir à sous-classer ou à ajouter de nouvelles propriétés.Et le voici à Swift:
la source
Si vous utilisez autant de commutateurs dans votre application, il y a un problème pour changer le code dans tous les endroits où la méthode d'action de UISwitch est définie.Vous pouvez créer un commutateur personnalisé et gérer les événements uniquement si la valeur change.
CustomSwitch.h
CustomSwitch.m
Nous ignorons les événements si la valeur est la même que la valeur modifiée.Mettez CustomSwitch dans toute la classe d'UISwitch dans le storyboard.Cela résoudra le problème et n'appellera la cible qu'une seule fois lorsque la valeur change
la source
J'ai de nombreux utilisateurs confrontés au même problème, il se peut donc que ce soit un bogue,
UISwitch
alors j'ai trouvé une solution temporaire. J'ai trouvé unegitHub
coutumeKLSwitch
utilisation pour le moment, j'espère qu'Apple corrigera ce problème dans la prochaine mise à jour de xCode: -https://github.com/KieranLafferty/KLSwitch
la source
Si vous n'avez pas besoin de réagir instantanément au changement de valeur du commutateur, ce qui suit pourrait être une solution:
la source
Ce problème est toujours présent à partir de la version bêta d'iOS 9.3. Si cela ne vous dérange pas que l'utilisateur ne puisse pas faire glisser en dehors du commutateur, je trouve que l'utilisation
.TouchUpInside
plutôt que.ValueChanged
fonctionne de manière fiable.la source
Je suis toujours confronté au même problème sous iOS 9.2
J'ai une solution et je me suis fait passer pour aider les autres
Créer une variable de comptage pour suivre le nombre d'appels de la méthode
Enregistrer la valeur booléenne pour la valeur de commutation
Dans la méthode de changement de valeur de Switch, effectuez l'action souhaitée uniquement pour le premier appel de méthode. Lorsque la valeur de commutation change à nouveau, définissez la valeur de comptage et la valeur de la variable booléenne par défaut
la source
Ce problème me tourmente lorsque je lie l'interrupteur à d'autres comportements. Généralement, les choses n'aiment pas aller de
on
àon
. Voici ma solution simple:Assurez-vous simplement de définir également
self.lastSwitchState
chaque fois que vous changez manuellementmySwitch.on
! :)la source
Ce type de problème est souvent causé par ValueChanged. Vous n'avez pas besoin d'appuyer sur le bouton pour lancer la fonction. Ce n'est pas un événement tactile. Chaque fois que vous changez par programme le commutateur en marche / arrêt, la valeur change et il appelle à nouveau la fonction IBAction.
@RoNiT a eu la bonne réponse avec:
Rapide
la source
Cela fonctionne bien et n'appelle plus la fonction de sélection.
la source
Cela a fonctionné pour moi.
la source