Ho un UINavigationController (A) che ha alcune sottoview che sono anche UIViewControllers (B e C). Il principale UINavigationController (A) si trova all'interno di un UITabViewController (D).
Sto cercando di spingere un controller di visualizzazione all'interno di B:
[self.navigationController pushViewController... etc]
Ora, il backBarButtonItem viene fornito con iltesto sbagliato Invece di dire "Back", dice semplicemente "Item". Ciò è probabilmente dovuto al fatto che uno dei controller della vista della mia catena ha il titolo impostato su "Elemento" o forse è nullo del tutto.
La mia domanda è, da dove viene generato il backBarButtonItem?
Ho provato alcune cose diverse che non funzionavano, ho provato ciascuna di queste righe di codice all'interno di B proprio prima di premere il controller della vista.
self.presentingViewController.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc
self.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc
self.navigationController.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc
Mi piacerebbe imparare il principio qui in modo che io capisca veramente da dove viene tratto questo oggetto e quale sia il modo giusto per farlo.
risposte:
2 per risposta № 1Diciamo il tuo C
il controller si trova sopra lo stack del controller di navigazione e il tuo B
controller è sotto quello. Per esempio.
navigationController.viewControllers = @[ bViewController, cViewController ];
Quindi il controller di navigazione sta visualizzando cViewController.view
.
Il controller di navigazione utilizza il secondo controller in cima allo stack per configurare il pulsante Indietro. In questo caso, usa bViewController
per configurare il pulsante Indietro. Questo è il suo algoritmo:
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";
}