150 votes

Texte personnalisé du "bouton retour" de UINavigationController ?

Le "bouton retour" d'un UINavigationController affiche par défaut le titre de la dernière vue de la pile. Existe-t-il un moyen d'avoir un texte personnalisé dans le bouton retour à la place ?

1 votes

Ce travail pour moi self.navigationController.navigationBar.topItem.title = @"Custom text";

346voto

rein Points 15639

De ce lien :

self.navigationItem.backBarButtonItem =
   [[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
            style:UIBarButtonItemStylePlain
           target:nil
           action:nil];

Comme Tyler l'a dit dans les commentaires :

ne le faites pas dans le contrôleur de vue visible, mais dans la vue que vous verrez si vous cliquez sur le bouton "retour".

4 votes

Vous devez release le site UIBarButtonItem .

218 votes

Notez également que vous devez effectuer cette opération dans le contrôleur de vue, un niveau au-dessus de la pile. En d'autres termes, ne le faites pas dans le contrôleur de vue visible, mais dans le contrôleur de vue que vous verriez si vous appuyiez sur le bouton retour.

0 votes

Merci beaucoup Tyler. Votre commentaire m'a fait gagner beaucoup de temps !

44voto

Petr Peller Points 1693

Vous pouvez définir le texte dans l'Interface Builder :

Sélectionnez l'élément de navigation du ViewController sur lequel le bouton retour doit revenir :

enter image description here

Dans l'inspecteur d'attributs du panneau Utilitaires, saisissez l'étiquette du bouton Retour :

enter image description here

Je préférerais cette approche plutôt que de définir le titre dans le code comme dans la réponse acceptée.

Notez également que vous devez effectuer cette opération dans le contrôleur de vue, un niveau au-dessus de l'élément pile. En d'autres termes, ne le faites pas dans le contrôleur de vue visible, mais dans le contrôleur de vue que vous verrez si vous appuyez sur le bouton retour.
--Tyler

0 votes

C'est la meilleure réponse que j'ai trouvée jusqu'à présent.

2 votes

Pour être clair, cela doit être défini sur l'élément de navigation du contrôleur de vue, et non sur l'inspecteur d'attributs du contrôleur de vue lui-même.

0 votes

C'est la meilleure réponse que j'ai trouvée.

22voto

Trang Points 205

J'utilise ceci :

// In the current view controller, not the one that is one level up in the stack
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationController.navigationBar.backItem.title = @"Custom text";
}

0 votes

Cela fonctionne presque pour moi, mais lorsque je clique sur le bouton retour, le texte redevient le titre du parent pour la durée de l'animation :-(

3 votes

Cela modifie le titre du bouton Retour du contrôleur situé en haut de la pile. Elle ne modifie pas le titre du bouton Retour du contrôleur actuellement affiché. Pire encore : cela change le titre du contrôleur précédent !

0 votes

Comme l'ont noté d'autres commentateurs, cette méthode est un peu intenable. Je ne vous recommande pas de le faire, car ce n'est pas vraiment la façon dont l'API souhaite que vous l'utilisiez. Vous pourriez vous exposer à des bogues difficiles à l'avenir !

11voto

Aubrey Goodman Points 238

J'ai trouvé une solution pratique à ce problème en fixant simplement le titre du contrôleur avant de pousser un autre contrôleur sur la pile, comme ceci :

self.navigationItem.title = @"Replacement Title";
[self.navigationController pushViewController:newCtrl animated:YES];

Ensuite, assurez-vous de définir le titre original dans viewWillAppear comme ceci :

-(void)viewWillAppear:(BOOL)animated
{
  ...
  self.navigationItem.title = @"Original Title";
  ...
}

Cela fonctionne car le comportement par défaut de UINavigationController lors de la construction du bouton retour lors d'une opération de poussée est d'utiliser le titre du contrôleur précédent.

1 votes

Le problème, c'est que le titre change sur l'ancienne vue et qu'il s'anime, ce qui donne un aspect un peu bizarre. Aucune des solutions proposées ici ne semble fonctionner comme vous le souhaiteriez :-(

1 votes

C'est parfait dans ma situation, car je n'affiche pas la barre de navigation sur l'écran précédent et je veux juste supprimer le titleLabel du bouton retour sur le nouvel écran et n'avoir que la flèche en chevron d'iOS7. Je peux donc simplement définir un littéral NSString vide pour le titre.

0 votes

Pousser le contrôleur de vue lève l'exception quand on tape sur le dos.

8voto

RemembranceNN Points 59
self.navigationController.navigationBar.topItem.title = @"Back";

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X