Le "bouton retour" d'un UINavigationController
affiche par défaut le titre de la dernière vue de la pile. Existe-t-il un moyen d'avoir un texte personnalisé dans le bouton de retour à la place?
ios
iphone
uinavigationcontroller
Ali Shafai
la source
la source
self.navigationController.navigationBar.topItem.title = @"Custom text";
Réponses:
Depuis ce lien :
Comme Tyler l'a dit dans les commentaires:
la source
release
leUIBarButtonItem
.UIBarButtonItemStyleBordered
par un appel à la propriétéself.navigationItem.backBarButtonItem.style
. Documentation: developer.apple.com/library/ios/documentation/uikit/reference/…Vous pouvez définir le texte dans Interface Builder:
Sélectionnez l'élément de navigation du ViewController auquel le bouton de retour reviendrait:
Dans l'inspecteur d'attributs du panneau des utilitaires, entrez votre libellé pour le bouton Retour:
Je préférerais cette approche à la définition du titre dans le code comme dans la réponse acceptée.
la source
J'utilise ceci:
la source
J'ai trouvé une solution pratique à cela en définissant simplement le titre du contrôleur avant de pousser un autre contrôleur sur la pile, comme ceci:
Ensuite, assurez-vous de définir le titre d'origine
viewWillAppear
, comme ceci:Cela fonctionne car le comportement par défaut
UINavigationController
lors de la construction du bouton de retour lors d'une opération push est d'utiliser le titre du contrôleur précédent.la source
Le titre du bouton de retour est par défaut le titre de la vue précédente, donc une astuce rapide que j'utilise consiste à placer le code suivant sur le fichier .m de la vue précédente.
la source
dans votre méthode init, ajoutez le code suivant:
puis ajoutez une méthode simple, pour permettre le rejet de viewcontroller:
la source
Ajoutez le code suivant dans viewDidLoad ou loadView
Je l'ai testé sur iPhone et iPad avec iOS 9
la source
navigationController
ettopItem
, par exemple:self.navigationController?.navigationBar.topItem?.title = "Custom Text"
Ajout à la réponse de rein. Notez dans la documentation d'Apple que la déclaration de backBarButtonItem est la suivante:
Par conséquent, la réponse de rein fuira de la mémoire car le setter synthétisé sera
retain
l'instance que vous lui transmettez, qui n'est jamais libérée explicitement. Vous pouvez remédier à cela en utilisantautorelease
Ou vous pouvez pointer une variable sur l'instance afin de pouvoir la libérer explicitement plus tard:
J'espère que cela t'aides!
la source
la source
J'ai découvert quelque chose d'intéressant. Si vous sous-classez le
UINavigationController
classez et remplacez lapushViewController:animated:
méthode et faites quelque chose comme ceci: (gardez à l'esprit que j'utilise ARC)Ensuite, pour tout ce
ViewControllers
qui est poussé avec votre contrôleur de navigation aura le bouton "Retour" en eux automatiquement. Si vous voulez changer le texte de certains contrôleurs de vue, vous pouvez essayer de convertir le contrôleur de vue dans une certaine classe ou votre propre protocole personnalisé (dont votre contrôleur de vue hérite et qui pourrait avoir une méthode commebackButtonText
ou quelque chose de stupide comme ça) qui peut vous donner certaines informations sur le viewcontroller qui arrive afin que vous puissiez personnaliser le texte du bouton de retour pour cela. Désormais, le texte du bouton de retour est pris en charge dans un endroit qui ne devrait en être que responsable. Je dois admettre que créer un nouveau bouton pour changer le texte est nul, mais bon.Quelqu'un peut-il penser à une raison pour laquelle ne pas le faire comme ça? Au moins, vous n'avez pas à jouer avec les titres du contrôleur de vue ou à vous rappeler de créer un nouveau bouton de retour avant d'appuyer sur le contrôleur de vue sur le contrôleur de navigation.
la source
La réponse de rein fonctionne bien.
Notez que si vous appuyez sur plusieurs contrôleurs de vue, le titre du bouton de retour modifié apparaîtra pour chacun d'eux, ce qui peut ne pas être ce que vous souhaitez.
Dans ce cas, vous devrez créer le UIBarButtonItem personnalisé chaque fois que vous poussez un contrôleur de vue.
Assurez-vous également de le faire avant d' appuyer sur le contrôleur de vue, sinon vous obtiendrez un hoquet d'écran lorsque le titre changera.
la source
En développant la suggestion d'Aubrey, vous pouvez le faire dans le contrôleur de vue enfant:
créer deux variables pour stocker les anciennes valeurs de navigationItem.title du parent et navigationItem du parent
dans
viewDidLoad
, ajoutez ce qui suit:dans
viewWillDisappear
, ajoutez ce qui suit:Ce n'est pas parfait. Vous verrez le titre de la vue parent changer au fur et à mesure que le nouveau contrôleur est animé. MAIS cela permet d'atteindre l'objectif d'étiqueter personnalisé le bouton de retour et de le garder en forme de bouton de retour standard.
la source
Mettez cela en vous
viewDidLoad
, espérons que cela aboutira à ce que vous recherchezla source
si vous souhaitez définir le titre dans le contrôleur ARRIVING (parfois plus de logique ..) dans swift 3, faites:
dans le prochain contrôleur:
généralement, je mets self.setBackButtonNavBar dans une extension de contrôleur.
la source
Je sais que c'est une vieille question et les réponses sont en quelque sorte mises à jour!
Le moyen le plus simple est de le faire dans le ViewController parent:
c'est-à-dire celui qui vous amène au contrôleur de vue suivant.
la source
Cette opération dans le code supprime le style de bouton de retour du
UINavigationConroller
. Si vous ajoutez un élément de navigation dans chacune de vos vues, vous pouvez définir le titre du bouton arrière dans leStoryBoard
.la source