Ich habe einen UINavigationController (A) mit einigen Unteransichten, die auch UIViewController (B und C) sind. Der Haupt-UINavigationController (A) befindet sich in einem UITabViewController (D).
Ich versuche einen View Controller innerhalb von B zu pushen:
[self.navigationController pushViewController... etc]
Nun kommt das backBarButtonItem mit dem durchfalscher Text Statt "Zurück" zu sagen, sagt es einfach "Artikel". Dies ist wahrscheinlich darauf zurückzuführen, dass für einen der View-Controller in meiner Kette der Titel auf "Item" gesetzt ist oder er gar nicht vorhanden ist.
Meine Frage ist, woher wird das BackBarButtonItem generiert?
Ich habe ein paar verschiedene Dinge ausprobiert, die nicht funktionierten. Ich habe jede dieser Codezeilen in B ausprobiert, kurz bevor ich den View-Controller schaltete.
self.presentingViewController.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc
self.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc
self.navigationController.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc
Ich möchte das Prinzip hier lernen, damit ich wirklich verstehe, woher dieses Element kommt und was der richtige Weg ist.
Antworten:
2 für die Antwort № 1Lassen Sie uns sagen C
Der Controller befindet sich oben auf dem Stack des Navigationscontrollers B
Controller ist darunter. Z.B.
navigationController.viewControllers = @[ bViewController, cViewController ];
Der Navigationscontroller wird angezeigt cViewController.view
.
Der Navigationscontroller verwendet den Second-to-Top-Controller auf seinem Stack zum Konfigurieren der Zurück-Schaltfläche. In diesem Fall verwendet es bViewController
um die Zurück-Taste zu konfigurieren. Dies ist sein Algorithmus:
UINavigationItem *navigationItem = bViewController.navigationItem;
UIBarButtonItem *barItem = navigationItem.backBarButtonItem;
if (barItem.image != nil) {
show a back button containing barItem.image;
}
else if (barItem.title != nil) {
if (barItem.title.length > 0) {
show a back button containing barItem.title;
} else {
don"t show a back button;
}
}
else if (navigationItem.title != nil) {
if (navigationItem.title.length > 0) {
show a back button containing navigationItem.title;
} else {
don"t show a back button;
}
}
else {
show a back button containing @"Back";
}