/ / Da dove viene questo backBarButtonItem? - uinavigationcontroller, pushviewcontroller, backbarbuttonitem

Da dove viene questo backBarButtonItem? - uinavigationcontroller, pushviewcontroller, backbarbuttonitem

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

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