La détection d'un changement dans UISwitch
Cela peut sembler trivial, mais j'ai remarqué quelques bizarreries. J'ai câblé un gestionnaire pour la Valeur a Changé cas de UISwitch. Ce que je voudrais attendre est que chaque fois que le gestionnaire est appelé la valeur de l'interrupteur allait changer. Mais ce n'est pas vraiment toujours le cas. Si vous appuyez sur l'interrupteur rapidement/désactiver le gestionnaire peut obtenir appelés successivement avec le MÊME état que le commutateur (dans mon application, c'est un problème). Alors je me demandais si quelqu'un d'autre a remarqué ce problème et a trouvé une bonne solution.
Vous devez vous connecter pour publier un commentaire.
UISwitch
fonction get pour seson
propriété estisOn
, de sorte que cette ligne devrait lireBOOL flag = theSwitch.isOn
.Obtenir de l'état de l'interrupteur dans le gestionnaire de:
Chaque fois que vous appuyez vous faites n'est pas immédiatement basculer l'interrupteur on/off. Si le commutateur est en position d'arrêt, vous pouvez obtenir un couple de presses en avant qu'il anime sur la position on. Chacun de ces presses sont interprétés comme "tournez le commutateur sur", car il n'est pas considéré comme "on" jusqu'à ce que l'animation est terminée. Vous obtenez un "valueChanged" rappel pour chacune de presse, malgré le fait que la valeur n'avait pas encore changé.
Dans iOS 11 un nouveau UISwitch bug a été introduit donc je ne recommande pas l'abonnement à la valeur des événements de modification. Sinon, votre rappel sera déclenché à chaque fois
UISwitch
'sisOn
les modifications des attributs de la programmation.À la place:
1) Abonnez-vous pour toucher jusqu'à l'intérieur de l'événement:
2) mettre en Œuvre la méthode de rappel:
3) Et maintenant lorsque vous modifier par programmation
isOn
valeur, il ne se déclenche pasonSwitchValueChanged
méthode.switch.isOn = !switch.isOn //'onSwitchValueChanged' is not triggered
touchDragInside
événement pourrait faire le travail?Voici une solution qui fonctionne pour moi.
Il envoie également un bien "/ne change" notification lorsque le commutateur est changé.
L'événement a également des fonctions correctement dans le avant et après les valeurs sont entretenus correctement.
Journal le dernier état de sorte que vous pouvez dire si son état modifié ou a été déclenchée avec le même état.
Lorsque vous mettez l'interrupteur on/off Sur la "valeur a changé" a été appelé.De sorte que vous pouvez détecter un changement de commutateur par appel de méthode sur valueChanged.
Mon problème était stupide un... je m'attendais à la
enabled
la valeur à modifier, mais, évidemment, ce n'est pas la valeur correcte pour inspecter lors de la bascule de l'interrupteur, leon
ouisOn
est la chose correcte à utiliser.