web-dev-qa-db-fra.com

Comment changer le nom du bouton retour UINavigationController?

J'ai un UIViewController et je navigue de mon premier contrôleur de vue à un second contrôleur de vue et je veux changer le nom du bouton affiché sur le navigationcontroller pour revenir en arrière ....

SecondViewController *secondController = [[SecondViewController alloc]
                                              initWithNibName:nil
                                              bundle:NULL]; 
[self.navigationController pushViewController:secondController  animated:YES];

maintenant dans le second viewcontroller je veux changer le nom du bouton dans le navigationController.

57
Bulla

Dans viewWillAppear écrire ceci

self.navigationItem.title = @"List View";

Et dans ViewWilldisapper, écrivez ceci

self.navigationItem.title = @"Back";

Cela fonctionne sans story-boards.

34
Tendulkar

Si vous souhaitez le faire par programme, vous pouvez le faire comme suit:

Objectif c

UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"Custom"
                                                             style:UIBarButtonItemStyleBordered
                                                            target:nil
                                                            action:nil];

[self.navigationItem setBackBarButtonItem:backItem];

Swift

let backItem = UIBarButtonItem(title: "Custom", style: .Bordered, target: nil, action: nil)
navigationItem.backBarButtonItem = backItem

Toutefois, si vous préférez utiliser Interface Builder, sélectionnez simplement le UINavigationItem pour lequel vous souhaitez définir le bouton Précédent et accédez à l'inspecteur d'attributs pour modifier le titre du bouton Précédent.

enter image description here

REMARQUE: Il est important de se rappeler que vous devez configurer ceci sur le contrôleur de vue sur lequel vous reviendriez lorsque vous appuyez sur le bouton Précédent, et non sur le contrôleur de vue actuellement visible.

182
Mick MacCallum

Il existe un moyen simple de le faire dans Interface Builder ou Storyboarding. Dans le contrôleur de vue parent, il suffit de définir l'attribut "Bouton Précédent" de l'élément de navigation sur le titre de votre choix. Voici un exemple:

Set Back Button Title of child view controller form parent view controller

La vue Tavern de Villian aura le titre du bouton Précédent "Retour", comme nous venons de le définir dans l'inspecteur d'attributs du contrôleur de navigation du parent (meilleures barres).

42
Roger

Swift 3:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Back"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

Remarque: le bouton Précédent appartient au contrôleur de vue précédent et non à celui actuellement présenté à l'écran. Pour modifier le bouton Précédent, vous devez le mettre à jour avant d'appuyer sur le contrôleur de vue qui a initié la séquence:

4
Anil

Dans mon cas, cela ne fonctionnait qu'en exécutant le code sur le fil principal, comme suit:

dispatch_async(dispatch_get_main_queue(), ^(void) {

    self.navigationController.navigationBar.backItem.title = @"Custom Title";
});
4
Winston

Dans Swift j'ai trouvé la solution très simple,

Supposons que je sois sur ViewControllerA et que je passe à ViewControllerB, si je veux changer le nom du bouton précédent qui apparaît sur ViewControllerB, je le ferai dans ViewControllerA,

self.title = "BackButtonTitle"

C'est ça.

Note: - Cela changera le titre de ViewControllerA

2
Zaid Pathan

Il est très important que l’option "Métriques simulées" dans le contrôleur de vue ne soit pas sélectionnée comme "Inférée".

J'ai essayé avec "Aucun" et tout va bien!

1
javifernandezr

Vous pouvez y parvenir en utilisant titleView de navigationItem

Swift 3 réponse

• Créer une extension pour UINavigationItem comme ci-dessous

extension UINavigationItem {
    func customTitle(title: String) {
        let titleLabel = UILabel()
        titleLabel.text = title
        titleLabel.textColor = UIColor.white
        titleLabel.textAlignment = .center
        titleLabel.sizeToFit()
        titleView = titleLabel
    }
}

• Dans vos contrôleurs viewDidLoad procédez comme suit

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        title = "Text For Back Button"
        navigationItem.customTitle(title: "Title for your view controller")
}
1
Leojin

Essayez comme ça: -

NSArray *viewControllerArr = [self.navigationController viewControllers];
// get index of the previous ViewContoller
long previousViewControllerIndex = [viewControllerArr indexOfObject:self] - 1;
UIViewController *previous;
if (previousViewControllerIndex >= 0) {
    previous = [viewControllerArr objectAtIndex:previousViewControllerIndex];
    previous.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
                                                 initWithTitle:@"Back"
                                                 style:UIBarButtonItemStylePlain
                                                 target:self
                                                 action:nil];
}
1
Hussain Shabbir

Si vous utilisez des références de Storyboard, le contrôleur de vue peut ne pas afficher l'élément de navigation dans Interface Builder.

Glisser manuellement une barre de navigation ne fonctionnera pas, vous devez faire glisser un élément de navigation

Vous pourrez alors définir le titre de son bouton de retour. C'est également à cet endroit que vous définissez le titre de la vue.

Citant Mick MacCallum:

REMARQUE: Il est important de se rappeler que vous devez configurer ceci sur le contrôleur de vue sur lequel vous reviendriez lorsque vous appuyez sur le bouton Précédent, et non sur le contrôleur de vue actuellement visible.

1
Lucas

Essayez ci-dessous Code:

[self.navigationItem setValue:@[@"customTitle",@""] forKey:@"abbreviatedBackButtonTitles"];
1
CharmingQin

En fait, vous pouvez changer le titre du bouton de retour:

self.navigationItem.backBarButtonItem.title = @"NewName";
1
Yakimenko Aleksey

Il y a deux façons de faire ça.

La première façon est par code de programme:

La réponse de Yakimenko Aleksey est la manière la plus simple, cela fonctionne vraiment (testé sur Xcode 8 + iOS 10)

Swift3:

self.navigationItem.backBarButtonItem?.title = "Your customized back title"

Remarque: vous devez appeler le code ci-dessus dans le contrôleur de vue source, et non le contrôleur de vue de destination.

La deuxième méthode consiste à utiliser la localisation du storyboard via Main.strings fichier,

"nnnnnnn.title" = "localized string";

Le nnnnnnn signifie l'identifiant d'objet du BackBarButtonItem dans le contrôleur de vue source (pas le contrôleur de vue de destination!)

Vous devez définir la propriété "back" de l'élément de la barre de navigation, il créera automatiquement un BarButtonItem, vous trouverez son id d'objet.

Désolé, je n'ai pas réussi à télécharger des captures d'écran.

0
osexp2003

Si vous utilisez Storyboard, il existe un moyen simple de le faire (cela a bien fonctionné pour moi).

  • Allez sur votre storyboard
  • Sélectionnez quel UIViewController vous souhaitez modifier le texte du bouton Précédent.
  • Cliquez sur le UINavigationItem en haut de votre UIViewController. (celui avec le titre)
  • Sur le panneau de droite, sélectionnez l'inspecteur d'attributs (la 4ème icône).
  • Vous pouvez maintenant définir les textes de titre, d'invite et de bouton arrière.

enter image description here

Source: http://pinkstone.co.uk/how-to-change-the-back-button-text-on-a-uinavigationcontroller-in-your-storyboard/

0
Luis

Je suis sur ViewController1 et vais sur ViewController2, si je veux changer le nom du bouton précédent affiché sur ViewController2, je le ferai dans ViewController2.

Swift 5

self.navigationController?.navigationBar.topItem?.title = "BackButtonTitle"

Objective-C

self.navigationController.navigationBar.topItem.title = @"BackButtonTitle";
0
said altintop

J'avais un storyboard assez complexe avec de nombreux contrôleurs de navigation et mon client souhaitait que tous les boutons du dos indiquent "Retour".

J'ai parcouru Interface Builder et mis "Back" dans le champ du bouton Back de chaque UINavigationItem.

Je ne travaillais pas à chaque changement de scène!

Le problème était que pas chaque contrôleur de vue du storyboard avait un UINavigationItem.

J'ai corrigé cela en faisant glisser un nouvel UINavigationItem sur chaque UIViewController qui n'en avait pas, et en mettant tout des champs du bouton Précédent à "Retour"

Surveillez les contrôleurs qui ne reçoivent pas automatiquement leur propre UINavigationItem.

0
DrSmart

Swift 4

Dans votre IViewController, définissez ceci:

let backButton = UIBarButtonItem()
backButton.title = "[Your title here]"
self.navigationItem.backBarButtonItem = backButton
0
Ben-hur Ott