web-dev-qa-db-fra.com

Swift 3.0 Ajouter un bouton droit à la barre de navigation

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.

19
Kevin

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.

5
Kyle H

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:)))
45
Mannopson
let rightBarButtonItem = UIBarButtonItem.init(image: UIImage(named: "EditImage"), style: .done, target: self, action: #selector(ViewController.call_Method))

self.navigationItem.rightBarButtonItem = rightBarButtonItem
8
Urvish Modi

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)
1
Stefan S

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
}
1
ikbal

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,

0
akr ios