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
.
Dans viewWillAppear écrire ceci
self.navigationItem.title = @"List View";
Et dans ViewWilldisapper, écrivez ceci
self.navigationItem.title = @"Back";
Cela fonctionne sans story-boards.
Si vous souhaitez le faire par programme, vous pouvez le faire comme suit:
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"Custom"
style:UIBarButtonItemStyleBordered
target:nil
action:nil];
[self.navigationItem setBackBarButtonItem:backItem];
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.
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.
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:
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).
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:
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";
});
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
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!
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")
}
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];
}
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.
Essayez ci-dessous Code:
[self.navigationItem setValue:@[@"customTitle",@""] forKey:@"abbreviatedBackButtonTitles"];
En fait, vous pouvez changer le titre du bouton de retour:
self.navigationItem.backBarButtonItem.title = @"NewName";
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.
Si vous utilisez Storyboard, il existe un moyen simple de le faire (cela a bien fonctionné pour moi).
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";
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.
Swift 4
Dans votre IViewController, définissez ceci:
let backButton = UIBarButtonItem()
backButton.title = "[Your title here]"
self.navigationItem.backBarButtonItem = backButton