Comment changer le texte sur un bouton de retour

90

Par défaut, le bouton de retour utilise comme texte dessus le titre d'un contrôleur de vue. Puis-je changer le texte sur le bouton de retour sans changer le titre d'un contrôleur de vue? J'en ai besoin parce que j'ai un contrôleur de vue dont le titre est trop long à afficher et dans ce cas, je voudrais afficher juste "Retour" comme légende du bouton de retour.

J'ai essayé ce qui suit qui n'a pas fonctionné:

self.navigationItem.leftBarButtonItem.title = @"Back";

Merci.

Ilya Suzdalnitski
la source
3
Gardez à l'esprit que les boutons arrière ont des titres pour une raison. En changeant le titre en «Retour», vous volez à l'utilisateur des informations sur la destination du bouton.
Simon

Réponses:

167

Essayer

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

J'ai trouvé cela en regardant la documentation backBarButtonItem dans la documentation Apple pour UINavigationItem .

Marc W
la source
1
Désolé, je n'ai pas la possibilité de tester cela pour le moment, mais cela applique-t-il la forme pointée vers la gauche des boutons Back intégrés ou conserve-t-il la forme rectangulaire par défaut de UIBarButtonItem?
Marco
Je ne suis pas sûr. Je suppose que cela garderait simplement la forme du bouton de retour automatiquement puisque vous définissez la propriété backButton, mais vous devrez la tester pour le savoir. Je suis aussi curieux.
Marc W
2
Oui, cela a fonctionné! Oui, cela change le titre, et oui, enregistre la forme. Merci pour ton aide.
Ilya Suzdalnitski
1
Remarque: le bouton de retour est conservé deux fois [1x à partir d'alloc, 1x à partir de la conservation de la propriété]. Cependant, si vous ne modifiez pas le bouton de retour, il est effectivement inoffensif.
Kelvin
29
Voir le commentaire de Marco ci-dessous - vous devriez appeler cela sur le contrôleur qui est sur le point de pousser quelque chose de nouveau, pas sur le contrôleur poussé.
Projet de loi
97

L'approche de Marc W a très bien fonctionné une fois que j'ai compris à quel contrôleur l'appliquer: celui qui a été renommé, pas celui du dessus. Donc, s'il s'agit de la pile de navigation:

(bottom)  ControllerA -> ControllerB  (top)

... et que vous souhaitez donner un titre plus court à ControllerA dans le bouton de retour affiché lorsque ControllerB est en haut , vous appliquez le changement de propriété à ControllerA .

Donc, c'est plus dans le contexte de self.title, pas comme les autres régleurs de boutons de barre gauche / droite.

Marco
la source
13
C'est un détail très important.
Projet de loi
4
wcochran, cela fonctionne avec le storyboard, assurez-vous simplement que vous définissez le bouton Retour du contrôleur parent. Donc, si vous avez le contrôleur A qui pointe vers le contrôleur B (via le storyboard segue), que pour personnaliser le texte du bouton Retour dans le contrôleur B, vous devez définir la propriété "Back Button" pour le contrôleur A dans l'éditeur de storyboard.
interrompre
Merci Marco. Ce que j'ai ressenti à propos de cette question, c'est que tout le monde essaie de répondre (et de bien répondre) mais pas pour la question qui est posée. Vous avez essentiellement frappé le clou dans la tête et correctement. Merci pour ça!
theiOSguy
+1 pour les détails importants. La réponse ci-dessus ne fonctionnera pas pour vous à moins que vous ne compreniez CETTE réponse.
baptzmoffire
Vous avez raison, le clavier du nouveau MacBook One est un peu difficile à s'habituer.
Mason G. Zhwiti
48

Vous pouvez le faire dans le storyboard. Trouvez le contrôleur de vue auquel vous souhaitez revenir (celui avec le titre long), sélectionnez son élément de navigation et ouvrez l'inspecteur d'attributs (Alt + Cmd + 4), insérez le titre personnalisé du bouton Retour.

entrez la description de l'image ici

Alyoka
la source
C'était exactement ce dont j'avais besoin puisque je voulais que tous les boutons de retour aient le texte "Back" au lieu des titres de navigation du contrôleur précédent.
Dave
8
Juste pour noter, le texte du bouton de retour est défini sur la vue à partir de laquelle le contrôleur suivant a été poussé, et non sur le contrôleur de vue que vous avez actuellement affiché.
Darbio
C'est une bonne solution simple, mais s'il vous plaît, n'allez pas renommer tous vos boutons de retour en "Retour", cela va à l'encontre du HIG d'Apple et va à l'encontre d'une partie de l'objectif d'un bouton de retour. :(
Samuel Goodwin
A très bien fonctionné. Assurez-vous simplement de SAUVEGARDER le fichier Storyboard. Ma première tentative n'a pas fonctionné car je n'ai pas remarqué que le Storyboard n'avait pas été sauvegardé! Et oui, vous changez le bouton RETOUR sur le contrôleur de vue d'où vous venez!
EricWasTaken
Très bien, mais que faire si je veux laisser juste une flèche, sans aucun texte? :)
Iurii Vasylenko
40

Merci Marco ... qui m'a aidé ...

Voici ce que j'ai fait.

Si vous utilisez une tableView pour naviguer vers différentes vues ... mettez le code:

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

Dans votre didSelectRowAtIndexPathméthode ... du premier contrôleur ... contrôleur A.

Lorsque vous naviguez vers le contrôleur B, le bouton porte le titre «Retour».

Ben Call
la source
1
Merci cher @Ben. C'était exactement ce que je cherchais :).
Arslan
12

Le bouton de retour extrait son texte du titre du contrôleur de vue parent.

Dans le contrôleur de vue parent (le contrôleur de vue qui apparaît lorsque vous appuyez sur le bouton de retour), définissez son propre titre comme texte souhaité sur le bouton de retour.

Par exemple, disons que nous avons une RootViewControllerclasse. Lorsque nous cliquons sur une cellule dans sa vue tableau, nous poussons une instance de SecondViewController. Nous voulons que le bouton Précédent de l' SecondViewControllerinstance indique "Accueil".

dans la viewDidLoadméthode de RootViewController.m :

self.title = @"Home";

dans la viewDidLoadméthode de SecondViewController.m :

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];    

Si vous voulez que votre bouton de retour indique «Retour», définissez le titre du contrôleur de vue parent sur @"Back";

Rose Perrone
la source
10

Cela fonctionne mieux pour moi. Essayez:

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
Felipe FMMobile
la source
1
Une excellente réponse a parfaitement fonctionné. il doit être marqué comme excepté.
Muhammad Rizwan
9

Si vous utilisez un storyboard:

  1. Ouvrez StoryBoard
  2. Dans la fenêtre Structure du document, recherchez ViewController auquel vous souhaitez revenir
  3. Cliquez sur l'élément de navigation de ce ViewController
  4. Dans l'explorateur d'attributs, remplacez la valeur du bouton Retour par votre vignette personnalisée

Voilà, profitez-en ...

AntonijoDev
la source
5

Et dans MonoTouch les travaux suivants (dans ViewDidLoad du contrôleur parent):

NavigationItem.BackBarButtonItem = new UIBarButtonItem( "Back", UIBarButtonItemStyle.Plain, null);
BillF
la source
3
[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc]
  initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]];

Cela a fonctionné pour moi.

user1004911
la source
3

Dans votre contrôleur de vue parent, définissez le bouton Retour lors du chargement de la vue:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    self.navigationItem.backBarButtonItem = 
       [[UIBarButtonItem alloc] initWithTitle:@"title" 
                                        style:UIBarButtonItemStylePlain 
                                       target:nil 
                                       action:nil];

}

Notez que nous n'avons pas besoin d'inclure autoreleaseà la fin la dernière version iOS.

J'espère que cela t'aides!

Zorayr
la source
1

[self.navigationController.navigationBar.backItem setTitle:@"back"];

Ça marche pour moi. Vous pouvez remplacer «retour» par autre chose.

ohmer
la source
Lorsque vous répondez avec du code, expliquez toujours quel était le problème avec le code fourni et comment votre code résout le problème.
Lukas Knuth
1

Celui-ci a fonctionné pour moi si vous ne voulez pas avoir de titre!

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];
gpichler
la source
1
self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
user2783798
la source
0

J'ai finalement compris pourquoi ces réponses ne fonctionnaient pas pour moi au début. J'ai mis le titre dans le storyboard. Quand je règle le titre sur le code. Ça marche!

self.navigationItem.title = @"Main Menu";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStyleBordered target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];
user2547667
la source
À l'avenir, vous souhaiterez peut-être publier des messages comme celui-ci en tant que commentaires sur la réponse qui n'a pas fonctionné pour vous.
Keith Smiley
0

Ma solution consistait à définir le titre lorsque le contrôleur de vue est poussé vers la pile de navigation et à le réinitialiser à l'aide de la méthode déléguée avant la fermeture du vc poussé:

J'ai donc mis le changement de titre dans l'appel du contrôleur de vue lorsque je pousse l'autre contrôleur de vue comme:

self.pushedVC = [self.storyboard instantiateViewControllerWithIdentifier:@"pushedVCIdentifier"];
self.pushedVC.delegate = self;   
[self.navigationController pushViewController:self.pushedVC animated:YES];
self.title = @"Back";

et dans la fonction de rappel de délégué (que j'appelle dans viewWillDissapear):

-(void)pushedVCWillClose:(PushedVC *)sender
{
    self.title = @"Previous Title";
}
Despotovic
la source
0

Si vous souhaitez non seulement modifier le texte du bouton Précédent et conserver la forme originale de la flèche gauche, mais aussi faire quelque chose lorsque l'utilisateur clique sur le bouton Précédent, je vous recommande de jeter un œil à mon " CustomNavigationController ".

jianpx
la source
0

// Vous pouvez y parvenir en définissant le titre dans le contrôleur de vue précédent comme indiqué ci-dessous

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for this view
        self.navigationItem.title = "My Title"

}

override func viewWillDisappear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for back button in next view 
        self.navigationItem.title = "Back"
}
John Carto
la source
0

Pour changer le titre du bouton de retour, reportez-vous au code ci-dessous

InformationVC *infoController=[[InformationVC alloc]init];[self.navigationController infoController animated:YES];

//Below code changed back button title on InformationVC page.
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Information" style: UIBarButtonItemStylePlain target: nil action: nil];
self.navigationItem.backBarButtonItem = backBarButton;`enter code here`
Kiran K
la source
-1

Cela a fonctionné pour moi:

self.navigationController.navigationBar.topItem.title = "Back"
Rocheux
la source