Wie „Transfer“ Ersthelfer von einem UIView zum anderen?
-
07-07-2019 - |
Frage
Ich habe eine UIView-Unterklasse (CustomView
für die Zwecke dieser Frage), die ihre eigene Abwicklung aller touches
Ereignisse hat (Begann, Verschoben, Ended, Abgebrochen). Ich habe auch eine UIButton
, die ein Geschwisterkind von CustomView
ist, dass es Überschneidungen.
Zum Beispiel meine Ansicht Hierarchie sieht wie folgt aus:
- UIView (Controller Ansicht)
- Custom mit Rahmen (0, 0, 300, 300)
- UIButton mit Rahmen (0, 0, 100, 50)
Ich mag die Custom Touch-Ereignisse zu erfassen, sobald der Benutzer aus dem UIButton gezogen hat. Durch die Debug-Protokollierung, scheint es, dass das UIControlEventTouchDragExit
Ereignis derjenige abzufangen ist (obwohl es nicht feuern, bis die Note um 100 Pixel entfernt von der Taste ist, aber das ist auf diese Frage nicht wichtig).
Im Idealfall, wenn die Schlepp Exit-Ereignis ausgelöst wird, würde die Stopp-Taste berühren Bewegungsereignisse empfangen, würde die Custom ein touchesBegan
Ereignis bekommen (auch wenn ich gefälschte mich irgendwie müssen), und alle zukünftigen Touch-Ereignisse (touchesMoved
, etc ) würde den Custom gesendet werden.
Ich habe folgendes versucht, und es hat keine Wirkung:
-(void)btnTouchDragExit:(id)sender
{
UIButton * btn = sender;
[btn resignFirstResponder];
[customView becomeFirstResponder];
}
ich glaube, das zugrunde liegende UITouch
Objekt (die über Touch-Ereignisse konsistent ist) nicht auf der Custom-zu-Punkt neu ausgerichtet werden. Wie kann ich den gewünschten Effekt erzielen?
Lösung
Just hitTest verwenden: withevent: um herauszufinden, was sehen „sollte“ das Ereignis werden empfangen, dann nach vorne auf das Ereignis in die entsprechende Ansicht. Sie könnten um ein wenig tanzen zu tun haben, Ereignisse abzufangen, bevor sie auf die Schaltfläche gehen, aber das ist, was hitTest: withevent:. Gemacht wurde
Andere Tipps
Sie haben canBecomeFirstResponder
außer Kraft zu setzen JA zurückzukehren sonst becomeFirstResponder
nichts tut. Dies ist bereits auf UIControl
s getan, aber nicht auf UIView
s