UIPicker erkennen, Tippen Sie auf die aktuell ausgewählte Zeile
Ich habe eine UIPickerView
und Die Methode didSelectRow
wird nicht aufgerufen, wenn Sie eine der ausgewählten Zeile. Ich brauche in diesem Fall behandeln. Irgendwelche Ideen?
- Ehrlich gesagt, ein wenig überrascht, dass niemand weiß, was hier zu tun ist. Eine Sache, die ich denken kann, ist, Sie könnte eine Unterklasse der pickerview und fügen Sie Ihre eigenen Berührungen Methoden, aber das scheint ein bisschen übertrieben und chaotisch. didSelectRow heißt die ganze Zeit, wenn eine Zeile wird die ausgewählte Zeile, nicht aber, wenn der Benutzer tippt (wählt) die Reihe, die bereits ausgewählt ist. Es muss eine Methode sein, die kann ich Haken in die zu fangen, in diesem Fall ohne subclassing...
- ähnliche Frage: stackoverflow.com/questions/567805/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten, entsprechen der Klasse der
UIGestureRecognizerDelegate
ProtokollDann, in der Ansicht setup:
Und anderswo:
Nikolaj Antwort mit Swift:
wichtig lassen Sie Ihren viewController bestätigen die UIGestureRecognizerDelegate ansonsten handler wird nicht ausgelöst:
letzten Schritt werden die handler für Tippen Sie auf ein Ereignis:
Nikolaj Antwort in Swift 4:
Ersten, fügen Sie ein
UITapGestureRecognizer
zu IhremUIPickerView
imviewDidLoad()
und lassen Sie IhreUIViewController
entsprechen denUIGestureRecognizerDelegate
.Hinzufügen diese Funktion ruft Ihre UIPickerViewDelegate, wenn ein Tippen auf eine Zeile erkannt wurde:
Fügen Sie die
shouldRecognizeSimultaneouslyWith
Methode vonUIGestureRecognizerDelegate
:Lösung
touchesBegan:
/touchesEnded:
funktionierte gut für mich, wenn mit iOS 4.2/4.3, aber Sie aufgehört zu arbeiten mit iOS. Schließlich habe ich diese Lösung sehr hilfreich sein können: mittels tap-gesten-Erkennung.In diesem Fall, wenn ein Benutzer tippt auf picker-Ansicht, der Selektor
aufgerufen. Hat bei mir auf beiden iOS 4.2+ /5.0
Hier ist der swift-code, um herauszufinden, wenn der Benutzer abgegriffen innerhalb der gewählten Zeile oder nicht. Ich habe gerade konvertiert obj-c-code aus Nikolay ' s Antwort.
Ich dies Problem gelöst, indem bilden von Unterklassen einer gemeinsamen superview und das abfangen von touch-events, bevor Sie Sie weiterleiten. Im interface builder, ich habe auch einen Knopf, von dem die Selektor-Bereich ist, befestigt eine Aktion, um die touch-up-event, und geschickt Sie die Taste "back" (das ist sehr wichtig, damit es nicht wieder selbst in hitTest). Die meisten relevanten code ist unten. Es könnte verbessert werden, für mehr kompliziert, wie multitouch, Fällen.
Hier ist Nikolaj trick im Swift-v3:
Erstes UIViewController implementieren Protokoll UIGestureRecognizerDelegate, und fügen Sie diese Methode, um es:
Wenden Sie dann eine UITapGestureRecognizer auf die Farbauswahl, und wenn Sie Ihr Ziel nicht genannt wird, rufen Sie die folgende extension-Methode: