Actuellement, la valeur par défaut du bouton de la barre de gauche est le titre de la vue qui a chargé la vue actuelle, c'est-à-dire la vue à afficher lorsque le bouton est enfoncé (bouton de retour).
Je veux changer le texte affiché sur le bouton pour autre chose.
J'ai essayé de mettre la ligne de code suivante dans la méthode viewDidLoad du contrôleur de vue, mais cela ne semble pas fonctionner.
self.navigationItem.leftBarButtonItem.title = @"Log Out";
Que devrais-je faire?
Merci.
-viewDidLoad:
Dans ChildVC, cela a fonctionné pour moi ...
Fonctionne aussi avec Swift!
la source
Voici la documentation de backBarButtonItem :
Contrôleur de vue A (le contrôleur de vue "parent" ):
Lorsqu'un autre contrôleur de vue B se trouve au-dessus de la pile de navigation et que A se trouve juste en dessous, le bouton de retour de B aura le titre "Court" .
la source
dans Xcode 4.5 en utilisant le storyboard, la solution de loin la plus simple que j'ai trouvée lorsque la valeur du bouton Retour n'a pas à changer dynamiquement est d'utiliser le champ "Bouton Retour" associé à l'élément de navigation du contrôleur de vue auquel vous veulent que le bouton "Retour" dise autre chose.
Par exemple, dans la capture d'écran ci-dessous, je veux que le bouton Retour du ou des contrôleurs de vue que j'appuie ait "Retour" comme titre du bouton Retour.
bien sûr, cela ne fonctionnera pas si vous avez besoin du bouton retour pour dire quelque chose de légèrement différent à chaque fois ... il y a toutes les autres solutions ici pour cela.
la source
Je sais, la question est très ancienne, mais j'ai trouvé une bonne solution.
Fonctionne avec childView! Testé avec iOS 7.
la source
Peut-être que je suis trop simpliste, mais dans la documentation d'Apple, le libellé est:
La solution marquée correcte ci-dessus définit un élément de bouton par défaut à partir du contrôleur parent. C'est la bonne réponse, mais je résous le problème en changeant
self.title
résous propriété de l'UIViewController juste avant de pousser le nouveau contrôleur sur la pile NavigationController.Cela met automatiquement à jour le titre du bouton de retour sur le prochain contrôleur, et tant que vous
self.title
revenez à ce qu'il devrait être,viewWillAppear
je ne vois pas cette méthode causer trop de problèmes.la source
Cela fonctionne mieux pour moi. Essayez:
la source
Dans Swift / iOS8, les éléments suivants ont fonctionné pour moi:
Tiré de la réponse de Felipe.
la source
self.navigationController?.navigationBar.topItem?.backBarButtonItem
Ok, voici le chemin. Si vous avez un contrôleur de vue "en premier" et que vous naviguez dans un autre contrôleur de vue "en second" en appuyant sur un bouton ou etc., vous devez effectuer un travail. Vous devez d'abord créer un BarButtonItem dans la méthode "Second" ViewDidLoad du contrôleur de vue comme ceci;
Après cela, vous devez écrire dans le code pour l'action "btnBack" dans le même fichier .m comme celui-ci;
C'est tout.
la source
leftBarButtonItem
n'a pas l'apparence d'unbackBarButtonItem
, si cela est important dans la conception de l'application.J'avais un contrôleur de vue parent avec un titre très long. Cela a entraîné le texte du bouton de retour dans le titre du contrôleur de vue enfant.
Après avoir essayé un tas de solutions différentes, voici ce que j'ai fini par faire (en développant l'approche @ john.k.doe):
Utilisation de Xcode 7.2, Swift 2
Navigation Item
à la scène Parent View Controller (pas le VC enfant)Attributes Inspector
de votre nouveauNavigation Item
, tapez unspace
caractère dans leBack Button
champ. Plus d'informations à ce sujet plus tard.fragment:
Explication:
Le type de bouton de retour appartient au contrôleur de vue parent. Le
Navigation Item
vous donne une poignée sur le bouton de retour, vous pouvez donc définir le titre dans le code ou dans le Storyboard.Remarque:
Si vous laissez le
Navigation Item
Back Button
texte comme chaîne vide par défaut, le titre du bouton de retour deviendra "Retour".D'autres approches fonctionnent, pourquoi utiliser celle-ci?:
Bien qu'il soit possible de remplacer le titre du bouton de retour sur le contrôleur de vue enfant, il était difficile d'obtenir une poignée jusqu'à ce qu'il ait déjà clignoté brièvement à l'écran.
Certaines approches construisent un nouveau bouton de retour et remplacent celui existant. Je suis sûr que cela fonctionne, et probablement nécessaire dans certains cas d'utilisation. Mais je préfère tirer parti des API existantes lorsque cela est possible.
La modification du
title
contrôleur de vue parent est la solution la plus rapide pour certaines situations. Cependant, cela change le titre parent, vous devez donc gérer l'état. Les choses deviennent également désordonnéesTab Bar Controller
car les changements de titre provoquent des effets secondaires avec lesTab Bar Item
titres.la source
Pour ceux qui utilisent des storyboards, sélectionnez simplement le parent (pas celui qui contient la vue cible) le cadre du contrôleur de vue (assurez-vous de cliquer à droite sur la barre de navigation, puis ouvrez l'inspecteur d'attributs, où vous trouverez trois entrées de formulaire. La troisième " bouton de retour "est ce que nous recherchons.
la source
Version Swift:
Dans votre ViewController enfant:
la source
Voici une autre façon de procéder.
Dans votre contrôleur de vue parent, implémentez la méthode suivante:
Dans votre contrôleur de vue enfant, lorsque vous souhaitez modifier le titre, cela fonctionnera:
Je n'ai jamais pu faire fonctionner la
parentViewController
propriété:Je ne sais pas si c'est un bug ou je ne l'utilise pas correctement. Mais la saisie de l'avant-dernier contrôleur de vue dans le
viewControllers
tableau pointe vers le contrôleur de vue parent, et je peux appeler correctement les méthodes parent avec cette référence.la source
D'accord. Personnellement, je détestais toutes ces options. Par conséquent, je suis venu avec le mien.
Sur la base des informations que j'ai vues. Il semble que le contrôleur de vue précédent contrôle son propre bouton "Retour" qui sera présenté sur le contrôleur de vue poussé.
J'ai créé une méthode de chargement différé pour le navigationItem sur le contrôleur qui veut le bouton de retour modifié.
Le mien est un contrôleur inviter l'acheteur
Inviter l'acheteur est le texte défini par défaut.
mais le bouton de retour devait être Inviter
Voici le code que j'ai utilisé pour créer le bouton de retour.
J'ai placé ce code en haut du fichier d'implémentation du contrôleur (.m) et il a remplacé automatiquement la méthode du super.
Je pense que c'est une façon beaucoup plus élégante d'accomplir cela.
Je place ce code en un seul endroit, et il est automatiquement rempli en cas de besoin.
Pas besoin d'appeler le code avant chaque demande push.
J'espère que cela t'aides
la source
la source
Voici la réponse:
Dans
viewDidAppear:animated
(PAS dansviewDidLoad
), procédez comme suitQue si vous souhaitez conserver la forme du bouton retour.
la source
Aucune des solutions expliquées ici n'a fonctionné pour moi. J'ai donc supprimé le titre de la scène d'où je venais de la manière suivante:
self.title = @"";
Ainsi, lorsqu'une nouvelle scène est présentée, le texte arrière n'apparaît pas.
Je suis absolument d'accord que ce n'est pas une solution claire du tout, mais cela a fonctionné et aucune des explications n'a fonctionné pour moi.
la source
J'ai trouvé qu'il était préférable de changer le titre du contrôleur de vue actuel dans la pile de navigation pour le texte souhaité du bouton de retour avant de passer au contrôleur de vue suivant.
Par exemple
Ensuite, dans viewDidAppear, redéfinissez le titre sur le titre souhaité pour le VC d'origine. Voila!
la source
Pour Swift:
la source
J'ai trouvé que la façon la plus simple de changer le nom du bouton de retour est de définir le titre des contrôleurs de vue sur le titre du bouton de retour, puis de remplacer le titleView dans l'élément de navigation des contrôleurs de vue par une étiquette personnalisée avec c'est réel Nom.
Comme ça:
CustomViewController.m
Cela rendra votre titre dans UINavigationBar comme s'il était natif. Donner au contrôleur de vue la possibilité d'avoir un titre séparé et un titre de bouton de retour.
Dans le cas des contrôleurs de vue A et B, A est responsable de dire à quoi devrait ressembler le bouton de retour, tandis que B est affiché.
EDIT: Cela conserve également l'aspect natif du bouton de retour (l'élément du bouton de la barre fléchée gauche).
la source
Ce code fonctionne aussi. Mettez ceci sur le contrôleur racine du contrôleur de navigation:
la source
Je suis nouveau dans iOS mais je fournirai ma réponse très simple de remplacer la classe du contrôleur de navigation. J'ai simplement remplacer les méthodes push et pop et enregistrer le titre du contrôleur de vue précédent. Désolé pour le collage dans le bloc js. Était peu confus comment le coller dans un bloc de code normal.
la source
self.navigationController.navigationBar.backItem.title = @"TEXT";
Et dans Swift:
la source
vous pouvez le mettre où bon vous semble dans le code du contrôleur Parrent, ce qui vous permet d'avoir des boutons de commande différents pour différentes vues enfant.
la source
La plupart des solutions tuent le style original de BackButton (le bouton de la barre fléchée gauche) tout en ajoutant un bouton habituel avec le titre souhaité.
Donc, pour conserver le style d'origine, il y a 2 façons:
1ère: utiliser un style de bouton non documenté (110 ou quelque chose comme ça) que je préfère ne pas faire. Mais si vous le souhaitez, vous pouvez trouver comment le faire ici, sur stackoverflow.
2e: Pour utiliser l'idée de Trenskow. Je l'ai aimé et je l'utilise un peu changé.
Au lieu de remplacer le titre - (NSString *), j'ai décidé de conserver le titre original de la manière suivante (ce qui me permet d'utiliser les titres de nib ainsi que le titre donné à l'état push btw).
Cette solution fonctionne bien et semble native. De plus, si vous l'utilisez dans la méthode viewDidLoad, cela empêche l'exécution plus d'une fois.
J'ai aussi essayé une solution de Jessedc mais ça a l'air mauvais. Il provoque un changement visible de la barre de titre de l'utilisateur à la volée de l'original au BackButton souhaité et inversé.
la source
Cela fonctionne pour moi comme une version "simplifiée" des réponses postées précédentes.
N'oubliez pas de mettre le code dans le contrôleur de vue parent (par exemple la vue qui a votre vue de table ou UITableViewController), pas la vue enfant ou détaillée (par exemple UIViewController).
Vous pouvez facilement localiser la chaîne du bouton de retour comme ceci:
la source
Nous avons deux VC A et B.
Si vous voulez changer le titre en B, écrivez ce code en A
Swift 4.1 Xcode 9.4
la source
La réponse de Stan était la meilleure. Mais il y a aussi un problème, lorsque vous utilisez le contrôleur avec une barre d'onglets et que vous modifiez le titre du contrôleur, vous pouvez également changer le titre de la barre d'onglets. .title dans la fonction. La réponse est ici: (Avec ARC et ajoutez-les dans viewDidLoad de la vue)
Dans mon utilisation, j'en fais une fonction comme celle-ci, j'ai juste la fonctionnalité avec un code de ligne dans le viewDidLoad.
la source
Si vous souhaitez non seulement modifier le texte du bouton Précédent en le même texte et conserver la forme de la flèche gauche d'origine, mais également faire quelque chose lorsque l'utilisateur clique sur le bouton Précédent, je vous recommande de jeter un œil à mon " CustomNavigationController " .
la source
PROBLÈME: le texte "Retour" dans la barre de navigation ne peut pas être remplacé.
RAISON: le libellé "Retour" est défini dans la barre de navigation après avoir poussé une vue car l'attribut .title dans le contrôleur de vue parent était défini sur zéro (ou non initialisé).
UNE SOLUTION: Si vous définissez self.title = "Peu importe ...", vous verrez qu'au lieu de "Retour" apparaîtra "Peu importe ..." après avoir appuyé sur le nouveau contrôleur de vue.
la source