Ceci est une question un peu différente de celle précédemment demandée. Alors soyez gentil.Comment personnaliser UINavigationBar pour l'ensemble de l'application?
- L'application entière a une barre de navigation avec des couleurs différentes.
- L'application entière a peu d'options dans sa barre de navigation. Ils sont tous pareils.
Qu'est-ce que j'attends?
J'ai créé cette extension pour UINavigationController
et en mesure de changer la couleur d'arrière-plan de la barre de navigation selon le contrôleur de vue que je serai.
extension UINavigationController {
func updateNavigationBar(withViewControllerID identifier: String?) {
setupNavigationBarButtons()
if identifier == kFirstVCIdentifier {
self.navigationBar.tintColor = .white
self.navigationBar.barTintColor = .red
} else if identifier == kSecondVCIdentifier {
self.navigationBar.tintColor = .white
self.navigationBar.barTintColor = .green
} else if identifier == kThirdVCIdentifier {
self.navigationBar.tintColor = .white
self.navigationBar.barTintColor = .blue
}
self.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
self.navigationBar.isTranslucent = false
self.navigationBar.clipsToBounds = false
self.navigationBar.shadowImage = UIImage.init()
self.view.backgroundColor = .clear
}
internal func setupNavigationBarButtons() {
let barButtonItemSettings = UIBarButtonItem.init(title: "Settings", style: .plain, target: self, action: #selector(actionSettings))
let barButtonItemSpace = UIBarButtonItem.init(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let barButtonItemLogOut = UIBarButtonItem.init(title: "LogOut", style: .plain, target: self, action: #selector(actionLogOut))
let buttons = [barButtonItemSettings, barButtonItemSpace, barButtonItemLogOut]
self.navigationItem.rightBarButtonItems = buttons
}
@objc internal func actionSettings() {
print("Settings")
}
@objc internal func actionLogOut() {
print("LogOut")
}
}
, je suis en train d'ajouter UIBarButton
dans cette extension, mais ils ne sont pas montrés. Donc j'ai besoin de le réparer. Et si elle est visible, comment puis-je appeler ses actions pour que je puisse gérer l'événement tactile de UIBarButton dans toute l'application. Correctement? Pas de patch, s'il vous plaît.
Je l'utilise comme ceci:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.updateNavigationBar(withViewControllerID: self.restorationIdentifier?)
}
vous pouvez masquer la barre de navigation et faire vue personnalisée –
Avez-vous essayé de changer la cible auto à self.viewControllers.last, il pourrait aider –