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!
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.
Dans Swift 3.0 + mettez le code ci-dessous dans la méthode appdelegate
didFinishLaunchingWithOptions
, 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
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)
self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "back-icon")
self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "back-icon")
// 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
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
/ 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
Et vous obtiendrez un bouton de retour parfait avec l'animation Swipe to back
// 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
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é.
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)