web-dev-qa-db-fra.com

Comment changer le titre du bouton de retour sur le contrôleur de navigation dans Swift3?

Je veux changer le titre du bouton arrière en n'importe quel nom dans Swift 3. J'ai essayé de nombreuses façons mais aucune d'entre elles n'a fonctionné pour moi.

self.navigationItem.backBarButtonItem?.title="Title"
self.navigationController?.navigationItem.backBarButtonItem?.title="Title"

Juste pour information, j'ai écrit ci-dessous le code dans appdelegate.

let backImage : UIImage = UIImage(named:"backArrow")!
UINavigationBar.appearance().barTintColor = UIColor(red: 0.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white]
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, 0), for: .default)
IQKeyboardManager.sharedManager().enable = true
self.window?.backgroundColor = UIColor.white
6
TechChain

Le nom du bouton de retour de l'élément de navigation sera le même que le titre du contrôleur de vue précédent qui le pousse vers la pile de navigation :)

Donc, si VC A pousse VC B, le bouton de retour dans VC B sera A.

Donc tout ce que vous pouvez faire est de changer le titre du viewController précédent avant de pousser le nouveau viewController en utilisant du code :)

self.navigationItem.title = "ABCD"

Et dans ViewWillAppear de VC A, vous pouvez rétablir le titre tel qu'il était auparavant :)

self.navigationItem.title = "Back to xyz"

Cela étant dit, si vous ne voulez pas de tout ce cirque :) vous pouvez simplement masquer le bouton de retour par défaut en utilisant,

self.navigationItem.hidesBackButton = true

dans votre VC B, créez un élément UIBarButton, définissez le titre que vous souhaitez définir, puis définissez-le comme leftBarButtonItem :) en utilisant,

self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: NSLocalizedString("ABCD", comment: "ABCD"), style: .plain, target: self, action:#selector(self.abcdTapped:)

bien sûr maintenant cela ne montrera pas l'icône "<" :) Maintenant, si vous le voulez aussi, vous pouvez l'ajouter comme image à l'élément de bouton de la barre arrière :) mais c'est encombrant :)

J'espère que ça aide :)

6
Sandeep Bhandari

Vous devrez définir la propriété backBarButtonItem de la navigationItem de la viewController à partir de laquelle vous poussez ladite viewController.

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.plain, target: nil, action: nil)

Cependant, vous devez définir cela pour chaque viewController.

4
Sparr

Ceci est le chemin:

extension UINavigationController {
    func addCustomBackButton(title: String = "Back") {
        let backButton = UIBarButtonItem()
        backButton.title = title
        navigationBar.topItem?.backBarButtonItem = backButton
    }
}
3
Valerio

Dans Swift 3. mettez le code ci-dessous dans la méthode appdelegatedidFinishLaunchingWithOptions ça fonctionne parfaitement pour moi

let backImage = UIImage(named: "BackNavigation")?.withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -80.0), for: .default)

La dernière ligne supprimera le titre de Navigation Back Button si vous ne voulez pas supprimer le titre, il vous suffit de le commenter

3
arunjos007

Je n'ai pas trouvé la réponse que je cherchais donc je partage avec vous ma solution.

Parfois, vous devez modifier le texte du bouton de retour dans le ViewController parent et non dans le ViewController où semble être défini le bouton de retour, rappelez-vous qu'un contrôleur de navigation empile les ViewControllers l'un après l'autre.

Dans mon cas, je l'ai fait sur la fonction prepare(for segue: ) du "ParentViewController":

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "showChildViewController" {
        if let childViewController = segue.destination as? ChildViewController {
            let backItem = UIBarButtonItem()
            backItem.title = "Back"
            navigationItem.backBarButtonItem = backItem
        }
    }
2
Jose Briones

Essayez les étapes suivantes pour définir l'image sur votre bouton de retour.

Sortie:

enter image description here

Étape 1:

Ajoutez le code suivant à votre AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    var backButtonImage = UIImage(named: "Your Image Name")
    backButtonImage = backButtonImage?.stretchableImage(withLeftCapWidth: 0, topCapHeight: 0)
    UIBarButtonItem.appearance().setBackButtonBackgroundImage(backButtonImage, for: .normal, barMetrics: .default)
    UINavigationBar.appearance().barTintColor = UIColor(red: 0.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 1.0)
    UINavigationBar.appearance().tintColor = UIColor.white

    return true
}

Étape 2:

Ajoutez le code suivant à votre MainVC

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    title = "Title 1"
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white, NSFontAttributeName:UIFont(name:"HelveticaNeue", size: 20)!]
  }

Étape 3:

Ajoutez le code suivant à votre DestVC ou 2ndVC

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    title = "Title 2"
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white, NSFontAttributeName:UIFont(name:"HelveticaNeue", size: 20)!]
  }

Étape 4:

Sélectionnez votre barre de navigation dans votre StoryBoard et goto Inspecteur d'attributs . Sous Élément de navigation changez votre Retour Nom du bouton entrez un espace vide ou par programmation créer un bouton de retour avec un titre simple ..

enter image description here

Étape 5:

Ajoutez une image d'icône à vos actifs. 1x29pt , 2x58pt et 3x87pt . Je ne suis pas sûr de la taille de l'image de l'actif.Vérifiez avec Apple doc sur la classe de taille ..

enter image description here


Mise à jour:

Ma réponse similaire liée à ce post.

Comment personnaliser le symbole de navigation arrière et le texte de navigation arrière?

0
Joe