Immer interactivePopGestureRecognizer entlassen callback/event
Ist es eine saubere Lösung auf eine callback-oder event auf der view-controller wird entlassen (geknallt), die durch eine interactivePopGestureRecognizer
?
Klar sein, ich brauche einige explizite Methode immer aufgerufen, auf die meisten top-controller (und keine andere), bevor der controller wird knallte durch diese Geste recogniser. Ich will nicht, um die Veranstaltung auf den navigation-controller und senden das Ereignis an den entsprechenden controller und ich weiß nicht verwenden möchten viewWillAppear
oder viewWillDissapear
...
Ist die nächste Sache, die ich habe ist das hinzufügen einer Ziel - /Selektor-pair-Mädchen um die Geste, mit nur 2 Probleme. Zuerst bekomme ich keine direkten Informationen, wenn die controller werden entlassen oder nicht (UIGestureRecognizerStateEnded
ausgelöst wird, in jedem Fall). Zweite nachdem der controller geschlossen ist habe ich entfernen müssen, das Ziel nicht aus den recogniser.
Der Grund dafür ist, ich habe ein paar Controller, die müssen senden Sie einige Informationen, um Ihre Delegierten. Mit "fertig" und "Abbrechen" Schaltflächen das Ereignis ausgelöst wird, delegate-Methoden aufgerufen werden, und dann wird der controller ist aufgetaucht. Ich brauche so ziemlich das gleiche passieren mit so wenig änderungen am code wie möglich.
Anderen situation an diese Geste ist die Möglichkeit zu werfen, eine Warnung anzeigen und Rückgängigmachen der Aktion: gibt es eine Möglichkeit zu zeigen, Warnung anzeigen, wenn diese Geste endet zu Fragen wie "sind Sie sicher, dass Sie stornieren möchten Ihre Arbeit" und haben die Benutzer wählen, ob die Steuerung geholt oder zurück gebracht wird.
- Interessantes problem. Ich habe das Gefühl, Sie müssen deaktivieren Sie die
interactivePopGestureRecognizer
und registrieren Sie Ihre eigenen oder verwenden Sie iOS 7 ist interaktive übergänge - Ich fürchte, Sie könnten Recht haben. Merkwürdig, dies ist nicht ein häufiges problem. Ich würde erwarten, dass sehr wenige apps benötigen, um dies zu implementieren, zumindest irgendwann. Das Schlimmste an der Umsetzung einer eigenen übergang ist, müssen Sie dann explizit deaktivieren Sie die Geste auf jeder der Steuerungen und reaktivieren Sie es, nachdem es geknallt (oder ein anderes geschoben wird).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, das ist alt, aber für alle anderen, die vielleicht mit ähnlichen Problemen konfrontiert. Hier ist der Ansatz, den ich verwendet. Zuerst registriere ich eine
UINavigationControllerDelegate
meinen navigation controller. Der Delegat implementieren muss.Objective-C
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
Swift
Also die Umsetzung würde wie folgt Aussehen.
Objective-C
Swift
Wird der callback ausgelöst, wenn der Benutzer hebt den finger und die (Objec-C)
[context isCancelled];
(Swift)context.isCancelled()
zurückYES
/true
wenn die animation wurde storniert (der view-controller wurde nicht geholt), sonstNO
/false
. Es gibt mehr Sachen, die in dercontext
, die von nutzen sein können, wie die beiden view-Controller beteiligt, und der Prozentsatz der animation, die abgeschlossen wurde, nach der Freigabe etc.- (void)controllerDismissedByPopGesture:(NSNumber *)isCancelled
zu JEDEM controller, und ich bin fertig. Vielleicht sollten Sie es hinzufügen, um Ihre Antwort...Swift 4-iOS-7 - 10
Swift 4 - iOS 5.1 10+