Comment supprimez-vous le texte du bouton de retour.
current back button: <Back
desired back button: <AnythingElse
Aucun d'entre eux n'a fonctionné:
self.navigationItem.backBarButtonItem?.title = "Back"
self.backItem?.title = ""
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationItem.backBarButtonItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title="Back"
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title
Le bouton Précédent appartient au contrôleur précédent view, pas à celui actuellement présenté à l'écran.
Pour modifier le bouton Précédent, vous devez le mettre à jour avant en appuyant sur le contrôleur de vue qui a initié la séquence:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let backItem = UIBarButtonItem()
backItem.title = "Something Else"
navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}
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
}
Le texte du bouton Précédent provient du titre de l'élément de navigation du contrôleur de vue parent. Ainsi, tout ce que vous définissez sur le titre de l'élément de navigation du contrôleur de vue précédent sera affiché sur le texte du bouton de retour du contrôleur de vue actuel. Vous pouvez simplement mettre "" comme titre d'élément de navigation dans la méthode viewWillAppear du contrôleur de la vue parent.
self.navigationItem.title = ""
Une autre façon est de mettre
self.navigationController?.navigationBar.topItem?.title = ""
dans la méthode viewWillAppear du contrôleur de vue en cours. Celui-ci posera un autre problème si la pile de navigation est trop imbriquée.
Si vous utilisez un fichier xib pour le contrôleur de vue, faites-le dans votre classe de contrôleur de vue.
class AboutUsViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
edgesForExtendedLayout = []
setUpNavBar()
}
func setUpNavBar(){
//For title in navigation bar
self.navigationController?.view.backgroundColor = UIColor.white
self.navigationController?.view.tintColor = UIColor.orange
self.navigationItem.title = "About Us"
//For back button in navigation bar
let backButton = UIBarButtonItem()
backButton.title = "Back"
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
}
}
Le résultat sera:
Je ne sais pas où vous avez utilisé les méthodes que vous avez mises dans votre question, mais je pourrais obtenir le résultat souhaité si j'utilise, dans ma classe ViewController
(dans laquelle je veux changer le bouton Précédent), dans la fonction viewDidLoad()
, la ligne suivante :
self.navigationController?.navigationBar.backItem?.title = "Anything Else"
Le résultat sera:
Avant
Après
Vous pouvez mettre cette 3 ligne de code dans votre override func viewDidLoad() {}
.
let backButton = UIBarButtonItem()
backButton.title = "name"
self.navigationController!.navigationBar.topItem!.backBarButtonItem = backButton
Le bouton Précédent appartient au contrôleur de vue précédent, pas à celui actuellement présenté à l'écran . Pour modifier le bouton Précédent, vous devez le mettre à jour avant d'appuyer sur, ajoutez viewdidload:
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: self, action: nil)
Cela devrait fonctionner:
override func viewDidLoad() {
super.viewDidLoad()
var button = UIBarButtonItem(title: "YourTitle", style: UIBarButtonItemStyle.Bordered, target: self, action: "goBack")
self.navigationItem.backBarButtonItem = button
}
func goBack()
{
self.navigationController?.popViewControllerAnimated(true)
}
Bien que cela ne soit pas recommandé car cela remplace en fait le bouton arrière et supprime également la flèche arrière et le geste de balayage.
Swift 4 - Configurez le bouton Précédent avant d'appuyer sur les contrôleurs de vue.
// if you want to remove the text
navigationItem.backBarButtonItem = UIBarButtonItem()
// if you want to modify the text to "back"
navigationItem.backBarButtonItem = UIBarButtonItem(title: "back", style: .plain, target: nil, action: nil)
Dans la méthode viewDidLoad
du contrôleur de présentation add:
// hide navigation bar title in the next controller
let backButton = UIBarButtonItem(title: "", style:.Plain, target: nil, action: nil)
navigationItem.backBarButtonItem = backButton
Utilisation rapide de 4.2;
Si vous souhaitez modifier le texte de l’élément du bouton Précédent de la barre de navigation: (Ajouter super.viewDidLoad ())
let backButton = UIBarButtonItem()
backButton.title = "New Back Button Text"
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
Si vous souhaitez ajouter un titre à la barre de navigation.
self.title = "Navigation Bar Title"
Self -> ViewController
bien que ces réponses résolvent le problème mais cela pourrait être utile
class MainNavigatioController: UINavigationController {
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
// first
let backItem = UIBarButtonItem()
backItem.title = "رجوع"
self.viewControllers.last?.navigationItem.backBarButtonItem = backItem
// then
super.pushViewController(viewController, animated: animated)
}
}
Swift 4
Tandis que le dicton précédent pour préparer la transition est correct et qu'il est vrai que le bouton de retour appartient au précédent VC, il ne fait qu'ajouter un tas de code plus inutile.
La meilleure chose à faire est de définir le titre du VC actuel dans viewDidLoad. Le titre du bouton de retour sera automatiquement défini correctement sur le prochain VC. Cette ligne a fonctionné pour moi
navigationController?.navigationBar.topItem?.title = "Title"
Essayez ceci ... ça va marcher ....
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
self.title = ""
}
Le code ci-dessus cachera le texte et affichera uniquement la flèche de retour sur la barre de navigation.
override func viewWillAppear(_ animated: Bool) {
self.tabBarController?.navigationItem.title = "Notes"
let sendButton = UIBarButtonItem(title: "New", style: .plain, target: self, action: #selector(goToNoteEditorViewController))
self.tabBarController?.navigationItem.rightBarButtonItem = sendButton
}
func goToNoteEditorViewController(){
// action what you want
}
J'espère que ça aide!! #Swift 3
Si vous poussez un contrôleur de vue depuis la page du contrôleur de vue de page, vous ne pouvez pas mettre à jour le titre du bouton de retour du contrôleur de navigation. Pour résoudre ce problème, créez un délégué dans votre contrôleur de vue parent (vous pouvez également pouvoir parcourir la hiérarchie du contrôleur de vue jusqu'au parent).
De plus, les boutons Précédent ont une limite de caractères. Si vous dépassez cette limite de caractères, le système utilisera par défaut la valeur "Back". Il ne sera pas tronqué pour vous. Par exemple:
backItem.title = "Birthdays/Anniversaries" // Get's converted to "Back".
backItem.title = "Birthdays/Anniversa…" // Fits and shows as is.
Swift 4
Dans mon cas, la solution consistait à effacer l'élément de navigation du contrôleur de vue maître avant de passer au contrôleur de vue enfant. Et réglez-le à nouveau s'il s'affiche à nouveau
MasterController
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationItem.title = "Master Title"
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationItem.title = ""
}
Et voici comment j'appuie sur UIViewController et efface l'élément de bouton de barre arrière du contrôleur enfant:
MasterController
let childController = ChildController(collectionViewLayout: UICollectionViewFlowLayout())
childController.navigationItem.backBarButtonItem?.title = ""
navigationController?.pushViewController(childController, animated: true)
Définissez self.title = ""
Avant self.navigationController?.pushViewController(vc, animated: true)
.
pour Swift 4.2
let backItem = UIBarButtonItem()
backItem.title = ""
navigationItem.backBarButtonItem = backItem