web-dev-qa-db-fra.com

Comment changer le texte sur un bouton de retour

Par défaut, le bouton Précédent utilise comme texte le titre d'un contrôleur de vue . Puis-je modifier le texte du bouton Retour sans modifier le titre d'un contrôleur de vue? J'ai besoin de cela car j'ai un contrôleur de vue qui Le titre est trop long à afficher et dans ce cas, je voudrais afficher uniquement "Back" comme légende pour le bouton Précédent.

J'ai essayé le suivant qui n'a pas fonctionné:

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

Merci.

89

Essayer

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

J'ai trouvé cela en consultant les documents backBarButtonItem dans la documentation Apple pour UINavigationItem .

167
Marc W

L'approche de Marc W a très bien fonctionné une fois que j'ai compris à quel contrôleur l'appliquer: celle qui est renommée, pas celle qui se trouve en haut. Donc, s'il s'agit de la pile de navigation:

(bottom)  ControllerA -> ControllerB  (top)

... et vous voulez attribuer un titre plus court à ControllerA dans le bouton Précédent affiché lorsque ControllerB est en haut , vous appliquez le changement de propriété à ControllerA

C'est donc plutôt dans le contexte de self.title, pas comme dans les autres boutons de réglage gauche/droite.

97
Marco

Vous pouvez le faire dans le storyboard. Recherchez le contrôleur de vue sur lequel vous souhaitez revenir (celui avec le titre long), sélectionnez son élément de navigation, ouvrez l'inspecteur des attributs (Alt + Cmd + 4), insérez le titre du bouton Précédent personnalisé.

enter image description here

47
alyoka

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

Voici ce que j'ai fait.

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

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

Dans votre méthode didSelectRowAtIndexPath ... du premier contrôleur ... contrôleur A.

Lorsque vous accédez au contrôleur B, le bouton porte le titre "Back".

40
Ben Call

Le bouton Précédent tire 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 Précédent), définissez son propre titre en tant que texte souhaité du bouton Précédent.

Par exemple, supposons que nous ayons une classe RootViewController. Lorsque nous cliquons sur une cellule dans sa vue sous forme de tableau, nous poussons une instance de SecondViewController. Nous voulons que le bouton Précédent de l'instance SecondViewController se lise: "Accueil".

dans la méthode viewDidLoad de RootViewController.m:

self.title = @"Home";

dans la méthode viewDidLoad de SecondViewController.m:

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

Si vous souhaitez que votre bouton Précédent indique "Précédent", définissez le titre du contrôleur de vue parent sur @"Back";

12
Rose Perrone

Cela fonctionne mieux pour moi. Essayez: 

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
10
Felipe FMMobile

Si vous utilisez le storyboard:

  1. Open StoryBoard
  2. Dans la fenêtre Structure du document, recherchez ViewController auquel vous souhaitez Retourner à
  3. Cliquez sur l'élément de navigation de ce ViewController
  4. Dans Attributs Explorer, remplacez la valeur du bouton Précédent par votre mosaïque personnalisée.

C'est ça, profitez-en ...

9
AntonijoDev

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

NavigationItem.BackBarButtonItem = new UIBarButtonItem( "Back", UIBarButtonItemStyle.Plain, null);
5
BillF

Dans votre contrôleur de vue parent, définissez le bouton Précédent 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 qu'il n'est pas nécessaire d'inclure autorelease à la fin de la dernière version iOS. 

J'espère que cela t'aides! 

3
Zorayr
[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc]
  initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]];

Cela a fonctionné pour moi.

3
user1004911

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

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

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

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

1
ohmer

Pour changer le titre du bouton précédent, 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`
0
Kiran K

Je savais enfin pourquoi ces réponses ne fonctionnaient pas pour moi au début Je mets le titre dans le storyboard. Quand je mets 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];
0
user2547667

// 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"
}
0
John Carto

Ma solution a été de définir le titre lorsque le contrôleur de vue est placé dans la pile de navigation et de le réinitialiser à l'aide de la méthode déléguée avant la fermeture de vc par poussée

Donc, je mets le changement de titre dans le contrôleur de vue appelant 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 en fonction de rappel délégué (que j'appelle dans viewWillDissapear):

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

Si vous souhaitez non seulement modifier le texte du bouton Précédent et rester la forme d'origine de la flèche gauche, mais également effectuer une action lorsque l'utilisateur clique sur le bouton Précédent, je vous recommande de jeter un coup d'œil à mon " CustomNavigationController " .

0
jianpx