web-dev-qa-db-fra.com

Changement rapide de la police et de la couleur du bouton de retour

Je développe une application dans Swift 2.2. Maintenant, je veux changer la police et la couleur du bouton Précédent pour une vue donnée. La vue en question a un contrôleur de navigation en tant que contrôleur parent.

J'ai essayé d'exécuter les deux lignes suivantes dans viewDidLoad de mon ViewController

self.navigationController!.navigationItem.backBarButtonItem!.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal)
self.navigationItem.backBarButtonItem!.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal)

Aucune des deux ne génère d'erreurs, mais cela ne fait aucune différence pour le bouton Précédent. J'ai aussi essayé d'exécuter ces deux

self.navigationController!.navigationItem.leftBarButtonItem!.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal)   
self.navigationItem.leftBarButtonItem!.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal)

Cela jette cependant une erreur (erreur qui déroule nil). Comment changer la police et la couleur du bouton de retour de la barre de navigation correctement? J'ai l'impression de ne pas modifier les bons éléments ...

11
Anton Gildebrand

Si vous voulez définir la même couleur pour barrer les boutons implicitement, alors dans votre écriture appdelegate in didfinishlaunchingwithoption,

 UINavigationBar.appearance().tintColor = UIColor.whiteColor() //your desired color here

Mettre à jour :

mettre cela dans appdelegae,

 UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal) // your textattributes here

Mise à jour 2:

  UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UINavigationBar.classForCoder()]).setTitleTextAttributes(["attribute" : "value"], forState: .Normal)

J'espère que ça va aider :)

15
Lion

Réponse rapide de Swift 3.0 (basée sur la réponse de Lion):

let newFont = UIFont(name: "Avenir Next", size: 16.0)!
let color = UIColor.white

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.classForCoder() as! UIAppearanceContainer.Type]).setTitleTextAttributes([NSForegroundColorAttributeName: color, NSFontAttributeName: newFont], for: .normal)

Fonctionne un régal, pour ceux qui ont déjà réussi à personnaliser d'autres parties de leurs barres de navigation, mais pas le bouton retour!

13
David West

Je pense que vous devriez le changer dans le vc avant votre vc réel. Regardez: UINavigationItem

Edit: Par exemple, vous pouvez écrire:

let item = UIBarButtonItem(title: "Text goes here", style: .Plain, target: self, action: #selector(self.navigationController?.popViewControllerAnimated(_:)))

item.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Helvetica-Bold", size: 23)!], forState: .Normal)

navigationItem.backBarButtonItem = item

dans votre méthode prepareForSegue.

4
switchCTRL

créer un bouton personnalisé et le faire comme vous voulez et ajouter une action pour revenir en arrière 

func addBackBarButtonOnNavigationBar(){
   // add image here
    let searchImage:UIImage = UIImage(named: "back button image")!

     var backBtn:UIBarButtonItem = UIBarButtonItem(image: searchImage,  style: UIBarButtonItemStyle.Plain, target: self, action: #selector(classname.buttonActionMethodName(_:)))
    backBtn.tintColor = UIColor.lightGrayColor()
  if let font = UIFont(name: "AvenirNext", size: 15) {
    backBtn.setTitleTextAttributes([NSFontAttributeName: font], forState: UIControlState.Normal)
}
    self.navigationItem.leftBarButtonItem = backBtn

}

func buttonActionMethodName(){
  self.navigationController!.popViewControllerAnimated(true)

}

Utilisez le code suivant:

    navigationController?.navigationBar.barTintColor = UIColor.purpleColor()
    navigationController?.navigationBar.tintColor = UIColor.whiteColor()

changer de couleur selon vos besoins

2
user5938635

Swift 4

dans AppDelegate.Swift

UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 15)!], for: .normal)
2
Maruta

dans Swift 4.2

to change back button color
self.navigationController?.navigationBar.tintColor = .white
0
Mohamed Shaban