web-dev-qa-db-fra.com

rapide: définition de l'image du bouton de retour dans la barre de navigation

J'essaie de définir l'image du bouton de retour dans la barre de navigation de mon contrôleur, voici mon code dans viewDidLoad ():

        var backImg: UIImage? = UIImage(named: "back_btn.png")
    println(backImg)
    if var back_img = backImg  {
        println("GET IT")
        println(back_img)
        println(UIControlState.Normal)
        println(UIBarMetrics.Default)
    self.navigationController.navigationBar.backItem.backBarButtonItem.setBackButtonBackgroundImage(back_img, forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)
    }

J'ai essayé de les mettre à viewWillLoad, mais obtenant la même erreur

Console avec message d'erreur:

<UIImage: 0x7ff37bd85750>
GET IT
<UIImage: 0x7ff37bd85750>
VSC14UIControlState (has 1 child)
(Enum Value)
fatal error: unexpectedly found nil while unwrapping an Optional value

Je ne sais pas quelle partie a mal tourné. On dirait que le back_img n'est pas nul, mais j'ai une erreur en disant que c'est nul

Merci!

12
fuiiii

J'ai compris en examinant un exemple de code. 1) Créez un élément de bouton de barre dans le storyboard. 2) Liez ce bouton au contrôleur à l'aide d'IBOutlet 3) Ajoutez une image au bouton

 var backImg: UIImage = UIImage(named: "back_btn")
 backBtn.setBackgroundImage(backImg, forState: .Normal, barMetrics: .Default)

PS: l'image doit être ajoutée au dossier Images.xcassets, voir l'exemple de code, ICatalog , pour plus de détails.

13
fuiiii

Dans Swift 3.0 + mettez le code ci-dessous dans la méthode appdelegatedidFinishLaunchingWithOptions, cela fonctionnera parfaitement

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

Ou pour Swift 4.0 +

let backImage = UIImage(named: "back-icon").withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: -80.0), for: .default)

La dernière ligne supprimera le titre de Navigation Back Button si vous ne souhaitez pas supprimer le titre, supprimez simplement la dernière ligne

22
Shahid Aslam

Si vous souhaitez modifier le bouton de retour dans chaque contrôleur, vous pouvez l'ajouter au délégué d'application dans didFinishLaunchingWithOptions

    let backImg: UIImage = UIImage(named: "back_button")!
    UIBarButtonItem.appearance().setBackButtonBackgroundImage(backImg, forState: .Normal, barMetrics: .Default)
17
Jaro
    self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "back-icon")
    self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "back-icon")
11

// Voici la solution parfaite pour reculer le bouton avec l'image et l'action dans la barre de navigation par défaut

Ajoutez d'abord UIBarButton dans la barre de navigation

enter image description here

Ensuite, accédez à la propriété dans l'inspecteur de fichiers dans le storyboard et ajoutez de l'espace pour masquer le texte du titre du bouton de retour

Définir l'image dans l'image du bouton Ui Bar

enter image description here

/ Méthode d'écriture sur le clic /

Pour activer le glissement à faire apparaître (retour au contrôleur précédent), écrivez deux codes de ligne dans la méthode ViewDidLoad

enter image description here

Et vous obtiendrez un bouton de retour parfait avec l'animation Swipe to back

enter image description here

// Remarque: - Pour désactiver le titre précédent du viewcontroller du bouton de retour, ajoutez un espace dans le texte du titre dans le bouton de retour dans l'inspecteur de fichier de storyboard

4
Mehul

manière alternative: cliquez sur le contrôleur de navigation dans le storyboard (pas sur le contrôleur de navigation dans l'UIViewController lui-même). Ensuite, dans la section des attributs sur le RHS, vous verrez l'image arrière et le masque arrière. Reculez l'image et vous avez terminé.

1
zevij

version Swift 4+

let backImage = UIImage(named: "back-icon").withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: -80.0), for: .default)
0
Abhishek Jain