/ / Woher kommt dieses backBarButtonItem wieder? - uinavigationcontroller, pushviewcontroller, backbarbuttonitem

Woher kommt dieses backBarButtonItem wieder? - uinavigationcontroller, pushviewcontroller, backbarbuttonitem

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 № 1

Lassen 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";
}