web-dev-qa-db-fra.com

Comment redéfinir le texte du bouton dans Swift

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
153
Onichan

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
}
507
Yariv

Vous pouvez le faire depuis le constructeur d’interface comme suit:

cliquez sur l'élément de navigation du contrôleur de vue précédent

 enter image description here

à partir de l'inspecteur d'attributs, définissez le texte du bouton Précédent comme bon vous semble C'est tout!!

 enter image description here

104
Ajinkya Patil

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.

34
minhazur

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:

 enter image description here

26
mustaq

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

 enter image description here

Après

 enter image description here

26
Francisco Romero

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
23
Hitesh Chauhan

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)
17
Mohammad Razipour

Vous pouvez simplement modifier le NavigationItem dans le storyboard

 enter image description here

Dans le bouton Précédent, ajoutez un espace et appuyez sur Entrée.

Remarque: Faites ceci dans le VC précédent.

9
xhinoda

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.

8
Dejan Skledar

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)
6
budidino

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
3
Claus

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

3
ikbal

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)

    }

}
1
Ahmad Labeeb

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"
1
Joel

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.

1
Sarabjit Singh
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

0
Gurunathan

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.
0
Justin Domnitz

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)
0
Jorge Casariego

Définissez self.title = "" Avant self.navigationController?.pushViewController(vc, animated: true).

0
米米米

pour Swift 4.2

let backItem = UIBarButtonItem()
backItem.title = ""
navigationItem.backBarButtonItem = backItem
0
Iryna Batvina