Bearbeiten
Es ist jetzt behoben ios7.1
Nehmen Sie keine Änderungen vor, um das Problem zu beheben.
Edit2
Anscheinend tritt das gleiche Problem in iOS 8.0 und 8.1 erneut auf
Edit3
Es ist jetzt behoben ios9.2
Nehmen Sie keine Änderungen vor, um das Problem zu beheben.
Hallo, heute habe ich in UISwitch's
Event ValueChanged:
Calling gesehen, wie continuously
ich On
zu Off
oder Off
zu Ein gewechselt habe und mein Finger sich immer noch auf der rechten und linken Seite bewegt hat. Ich habe mit NSLog ein GIF-Bild erstellt, um es klarer zu machen.
Meine Methode mit Wertänderung ist:
- (IBAction)changeSwitch:(id)sender{
if([sender isOn]){
NSLog(@"Switch is ON");
} else{
NSLog(@"Switch is OFF");
}
}
iOS6 funktioniert der gleiche Code von Switch wie erwartet:
kann mir also jemand vorschlagen, der nur einmal seinen zustand ein- oder ausschaltet. oder ist das ein fehler oder was ..?
AKTUALISIEREN
Hier ist meine Demo davon:
Antworten:
Bitte beachten Sie den folgenden Code:
quelle
Gleicher Fehler hier. Ich glaube, ich habe eine einfache Problemumgehung gefunden. Wir müssen nur eine neue verwenden
BOOL
, die den vorherigen Status derUISwitch
und eine if-Anweisung in unsererIBAction
(Wert geändert ausgelöst) speichert , um zu überprüfen, ob sich der Wert des Schalters tatsächlich geändert hat.Keine seltsamen Verhaltensweisen mehr. Ich hoffe es hilft.
quelle
Mit der Eigenschaft
UISwitch
's' können Sie.selected
sicherstellen, dass Ihr Code nur einmal ausgeführt wird, wenn sich der tatsächliche Wert ändert. Ich denke, dies ist eine großartige Lösung, da keine Unterklassen oder neuen Eigenschaften hinzugefügt werden müssen.Und hier ist es in Swift:
quelle
Wenn Sie in Ihrer App so viele Switches verwenden, besteht ein Problem darin, den Code an allen Stellen zu ändern, an denen die Aktionsmethode von UISwitch definiert ist. Sie können benutzerdefinierte Switches vornehmen und die Ereignisse nur behandeln, wenn sich der Wert ändert.
CustomSwitch.h
CustomSwitch.m
Wir ignorieren Ereignisse, wenn der Wert mit dem geänderten Wert übereinstimmt. Fügen Sie CustomSwitch in die gesamte Klasse von UISwitch im Storyboard ein. Dadurch wird das Problem behoben und das Ziel nur einmal aufgerufen, wenn sich der Wert ändert
quelle
Ich habe viele Benutzer, die mit dem gleichen Problem konfrontiert sind. Vielleicht ist dies ein Fehler,
UISwitch
also habe ich gerade eine vorübergehende Lösung gefunden. Ich habe einengitHub
Benutzer gefundenKLSwitch
, der dies für den Moment verwendet. Ich hoffe, Apple wird dies im nächsten Update von xCode beheben: -https://github.com/KieranLafferty/KLSwitch
quelle
Wenn Sie nicht sofort auf die Wertänderung des Schalters reagieren müssen, kann Folgendes eine Lösung sein:
quelle
Dieses Problem ist ab iOS 9.3 Beta immer noch vorhanden. Wenn es Ihnen nichts ausmacht, dass der Benutzer nicht außerhalb des Schalters ziehen kann, funktioniert das
.TouchUpInside
eher, als dass es.ValueChanged
zuverlässig funktioniert.quelle
Ich habe immer noch das gleiche Problem in iOS 9.2
Ich habe Lösung und posiere, weil es anderen helfen könnte
Erstellen Sie eine Zählvariable, um zu verfolgen, wie oft die Methode aufgerufen wurde
Speichern Sie den Bool-Wert für den Schalterwert
Führen Sie in der Wertänderungsmethode von Switch die Wunschaktion nur für den ersten Methodenaufruf aus. Wenn der Schaltwert erneut geändert wird, setzen Sie den Zählwert und den Wert der Bool-Variablen auf den Standardwert
quelle
Dieses Problem plagt mich, wenn ich den Schalter mit anderen Verhaltensweisen verbinde. Im Allgemeinen gehen die Dinge nicht gerne von
on
nachon
. Hier ist meine einfache Lösung:Stellen Sie nur sicher, dass Sie dies auch
self.lastSwitchState
jedes Mal einstellen, wenn Sie manuell ändernmySwitch.on
! :) :)quelle
Diese Art von Problem wird häufig durch ValueChanged verursacht. Sie müssen die Taste nicht drücken, damit die Funktion ausgeführt wird. Es ist kein Touch-Event. Jedes Mal, wenn Sie den Schalter programmgesteuert auf Ein / Aus stellen, ändert sich der Wert und die IBAction-Funktion wird erneut aufgerufen.
@RoNiT hatte die richtige Antwort mit:
Schnell
quelle
Dies funktioniert einwandfrei und ruft die Auswahlfunktion nicht erneut auf.
quelle
Das hat bei mir funktioniert.
quelle