/ / UINavigationBar: fangen Sie die Zurück-Taste ab und bewegen Sie die Wischbewegung zurück - ios, uinavigationbar, swipe, back

UINavigationBar: fangen Sie die Zurück-Taste ab und bewegen Sie die Wischbewegung zurück - ios, uinavigationbar, swipe, back

Ich habe eine UINavigationBar, die das Tippen auf die Schaltfläche "Zurück" abfängt und den Benutzer darauf hinweist, wenn Änderungen nicht gespeichert wurden. Dies basiert auf der in UINavigationController und UINavigationBarDelegate.ShouldPopItem () mit MonoTouch unter Verwendung des Protokolls UINavigationBarDelegate und Implementierung - (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item;

Nun hat iOS7 die Swipe-to-Go-Back-Geste eingeführt, die ich ebenfalls gerne abfangen möchte, aber ich kann es nicht mit den bisher gefundenen Lösungen erreichen, nämlich mit [self.interactivePopGestureRecognizer addTarget:self action:@selector(handlePopGesture:)]; und

- (void)handlePopGesture:(UIGestureRecognizer *)gesture {
if (gesture.state == UIGestureRecognizerStateEnded) {
[self popViewControllerAnimated:NO];
}
}

Während dies die Ansichten öffnet, verlässt es die AnsichtNavigationsschaltflächen an Ort und Stelle, so dass ich am Ende mit einer Zurück-Taste, die nirgendwohin führt, sowie alle anderen Navigationsschaltflächen, die ich zur Navigationsleiste hinzugefügt habe. Irgendwelche Tipps?

Antworten:

4 für die Antwort № 1

Um die hintere Wischgeste abzufangen, können Sie festlegen self als Delegierter der Geste (<UIGestureRecognizerDelegate>) und dann JA oder NEIN aus gestureRecognizerShouldBegin basierend auf nicht gespeicherten Änderungen:

// in viewDidLoad
self.navigationController.interactivePopGestureRecognizer.delegate = self;

// ...
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if ([gestureRecognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]]) {

if (self.dirty) {
// ... alert
return NO;
} else
return YES;
} else
return YES;
}

In der Warnung können Sie den Benutzer fragen, ob er trotzdem zurückkehren möchte, und in diesem Fall den Controller einschalten alertView clickedButtonAtIndex:

Hoffe, das ist eine Hilfe.