/ / D'où vient ce backBarButtonItem? - uinavigationcontroller, pushviewcontroller, élément backbarbutton

D'où vient ce backBarButtonItem? - uinavigationcontroller, pushviewcontroller, élément backbarbutton

J'ai un UINavigationController (A) qui a quelques sous-vues qui sont aussi des UIViewControllers (B et C). Le contrôleur principal UINavigation (A) se trouve à l’intérieur d’un UITabViewController (D).

J'essaie de pousser un contrôleur de vue dans B: [self.navigationController pushViewController... etc]

Maintenant, le backBarButtonItem arrive avec lemauvais texte. Au lieu de dire "Retour", il est simplement dit "Item". Cela est probablement dû au fait que le titre de l'un des contrôleurs de vue de ma chaîne est défini sur "Article" ou peut-être même qu'il est nul.

Ma question est la suivante: où est généré le backBarButtonItem?

J’ai essayé différentes solutions qui ne fonctionnaient pas. J’ai essayé chacune de ces lignes de code dans B juste avant d’appuyer sur le contrôleur de vue. Aucune d’entre elles n’a fonctionné.

self.presentingViewController.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc

self.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc

self.navigationController.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc

Je voudrais apprendre le principe ici pour que je comprenne vraiment d’où provient cet élément et quelle est la bonne façon de le faire.

Réponses:

2 pour la réponse № 1

Disons votre C contrôleur est au-dessus de la pile du contrôleur de navigation, et votre B le contrôleur est en dessous. Par exemple.

navigationController.viewControllers = @[ bViewController, cViewController ];

Donc, le contrôleur de navigation affiche cViewController.view.

Le contrôleur de navigation utilise le contrôleur situé du deuxième au sommet de sa pile pour configurer le bouton Précédent. Dans ce cas, il utilise bViewController configurer le bouton retour. C'est son algorithme:

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