Vielleicht passt diese Antwort nicht zu Ihrer Erklärung, sondern zum Titel der Frage. Dies ist nützlich, wenn Sie wissen möchten, wann Sie die Zurück-Taste auf einem gedrückt haben UINavigationBar
.
In diesem Fall können Sie das UINavigationBarDelegate
Protokoll verwenden und eine der folgenden Methoden implementieren:
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item;
- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item;
Wenn die didPopItem
Methode aufgerufen wird, haben Sie entweder die Zurück-Taste gedrückt oder Sie haben sie verwendet[UINavigationBar popNavigationItemAnimated:]
Methode , und die Navigationsleiste hat das Element eingeblendet.
Nun, wenn Sie wissen möchten, welche Aktion die ausgelöst hat didPopItem
Methode hat, können Sie ein Flag verwenden.
Bei diesem Ansatz muss ich kein Schaltflächenelement in der linken Leiste mit einem Pfeilbild manuell hinzufügen, um es der iOS-Zurück-Schaltfläche ähnlich zu machen und mein benutzerdefiniertes Ziel / meine benutzerdefinierte Aktion festlegen zu können.
Sehen wir uns ein Beispiel an:
Ich habe einen Ansichts-Controller mit einem Seitenansichts-Controller und eine benutzerdefinierte Seitenanzeige-Ansicht. Ich verwende auch eine benutzerdefinierte UINavigationBar, um einen Titel anzuzeigen, um zu wissen, auf welcher Seite ich bin, und die Schaltfläche "Zurück", um zur vorherigen Seite zurückzukehren. Außerdem kann ich auf dem Seiten-Controller zur vorherigen / nächsten Seite wischen.
#pragma mark - UIPageViewController Delegate Methods
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed {
if( completed ) {
if( currentIndex > lastIndex ) {
UINavigationItem *navigationItem = [[UINavigationItem alloc] initWithTitle:@"Some page title"];
[[_someViewController navigationBar] pushNavigationItem:navigationItem animated:YES];
[[_someViewController pageControl] setCurrentPage:currentIndex];
} else {
_autoPop = YES;
[[_someViewController navigationBar] popNavigationItemAnimated:YES];
[[_someViewController pageControl] setCurrentPage:currentIndex];
}
}
}
Dann implementiere ich UINavigationBar-Delegatenmethoden:
#pragma mark - UINavigationBar Delegate Methods
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
if( !_autoPop ) {
} else {
}
_autoPop = NO;
return YES;
}
In diesem Fall habe ich verwendet, shouldPopItem
weil der Pop animiert ist und ich die Zurück-Taste sofort bedienen und nicht warten wollte, bis der Übergang abgeschlossen ist.