J'ai ajouté une barre de navigation en haut d'un contrôleur de vue. J'essaie de contrôler si un bouton est visible en fonction d'une condition, mais je ne parviens pas à l'ajouter. Jusqu'ici j'ai,
var addButton: UIBarButtonItem = UIBarButtonItem(title: "test", style: .done, target: self, action: #selector(addTapped))
override func viewDidLoad() {
super.viewDidLoad()
let boool = true
if boool {
self.navigationItem.rightBarButtonItem = self.addButton
}
else {
self.navigationItem.rightBarButtonItem = nil
}
}
func addTapped(sender: AnyObject) {
print("hjxdbsdhjbv")
}
Je crois que cela ne fonctionne pas correctement car j'ai ajouté une barre de navigation dans le VC, au lieu d'utiliser un contrôleur de navigation et de travailler avec la barre. Je me demandais s'il y avait un moyen de travailler avec cette barre de navigation.
Vous dites que vous avez ajouté un UINavigationBar
à votre contrôleur de vue via le storyboard, mais en regardant le code que vous avez fourni, il n'y a pas de connexion de sortie à votre barre de navigation dans IB.
Pour accéder à self.navigationItem
votre contrôleur de vue doit être incorporé dans un UINavigationController
ou faire partie d'une hiérarchie. À moins que vous n'ayez besoin d'une barre de navigation personnalisée sur un contrôleur de vue individuel, je suggère de la supprimer d'Interface Builder, puis de vous assurer que le contrôleur de vue en question est incorporé dans un UINavigationController
ou qu'il est poussé sur le pile de navigation d’un autre contrôleur intégré à un contrôleur de navigation et vous devriez alors voir votre UIBarButtonItem
.
C'est simple. Mettez cette ligne de code dans le viewDidLoad
:
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "test", style: .done, target: self, action: #selector(addTapped))
Mis à jour pour Swift 4 ou plus tard:
Une fonction personnalisée:
@objc func action(sender: UIBarButtonItem) {
// Function body goes here
}
(Personnalisé) Option du bouton de la barre de droite:
self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(title: "some_text", style: .done, target: self, action: #selector(self.action(sender:)))
(Personnalisé) Option du bouton de la barre de gauche:
self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(title: "some_text", style: .done, target: self, action: #selector(self.action(sender:)))
Vous pouvez également ajouter des éléments de bouton de la barre système, comme ceci: UIBarButtonItem.SystemItem
Définit les images fournies par le système pour les éléments de boutons de la barre: . Add, .done, .cancel, .edit, .save, .compose, .reply, .organize et plus.
Elément du bouton de la barre de droite (Système):
self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonItem.SystemItem.add, target: self, action: #selector(self.action(sender:)))
Elément du bouton de barre (système) gauche:
self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonItem.SystemItem.add, target: self, action: #selector(self.action(sender:)))
let rightBarButtonItem = UIBarButtonItem.init(image: UIImage(named: "EditImage"), style: .done, target: self, action: #selector(ViewController.call_Method))
self.navigationItem.rightBarButtonItem = rightBarButtonItem
Tout d'abord, vous devez connecter votre barre de navigation à un IBOutlet afin de pouvoir vous y référer dans votre code. Après cela, ce code devrait fonctionner:
let navigationItem = UINavigationItem(title: "Title")
navigationItem.rightBarButtonItem = self.addButton
navigationItem.hidesBackButton = true
self.navigationBar.pushItem(navigationItem, animated: false)
Rapide 4,2;
Ajouter viewController
override func viewDidLoad() {
super.viewDidLoad()
self.addNavigationBarButton(imageName: "ic_back", direction:.left)
}
Ajoutez Class
votre API ou votre classe d'utilitaire
public func addNavigationBarButton(imageName:String,direction:direction){
var image = UIImage(named: imageName)
image = image?.withRenderingMode(.alwaysOriginal)
switch direction {
case .left:
self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style:.plain, target: nil, action: #selector(goBack))
case .right:
self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: image, style:.plain, target: nil, action: #selector(goBack))
}
}
@objc public func goBack() {
self.navigationController?.popViewController(animated: true)
}
public enum direction {
case right
case left
}
testé dans Xcode 10.2, Swift 5.0; Tout d'abord, j'ai intégré mon ViewController dans UINavigationController dans IB. Ensuite, dans ViewDidLoad, incluez ces lignes
self.title = "orange"
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(changeLayout)).
Remarque - l'accès au titre ou l'ajout d'un bouton via le contrôleur de navigation ne fonctionnait pas. Par exemple: la définition du titre - Self.navigationcontroller.navigationItem.title ne fonctionnait pas,