Make a UIBarButtonItem disappear using swift IOS Make a UIBarButtonItem disappear using swift IOS swift swift

Make a UIBarButtonItem disappear using swift IOS


Use the property enabled and tintColor

    let barButtonItem:UIBarButtonItem? = nil    if isHidden{        barButtonItem?.enabled      = false        barButtonItem?.tintColor    = UIColor.clearColor()    }else{        barButtonItem?.enabled      = true        barButtonItem?.tintColor    = nil    }


Do you really want to hide/show creeLigueBouton? It is instead much easier to enable/disable your UIBarButtonItems. You would do this with a few lines:

if(condition == true) {    creeLigueBouton.enabled = false} else {    creeLigueBouton.enabled = true}

This code can even be rewritten in a shorter way:

creeLigueBouton.enabled = !creeLigueBouton.enabled

Let's see it in a UIViewController subclass:

import UIKitclass ViewController: UIViewController {    @IBOutlet weak var creeLigueBouton: UIBarButtonItem!    @IBAction func hide(sender: AnyObject) {        creeLigueBouton.enabled = !creeLigueBouton.enabled    }}

If you really want to show/hide creeLigueBouton, you can use the following code:

import UIKitclass ViewController: UIViewController {    var condition: Bool = true    var creeLigueBouton: UIBarButtonItem! //Don't create an IBOutlet    @IBAction func hide(sender: AnyObject) {        if(condition == true) {            navigationItem.rightBarButtonItems = []            condition = false        } else {            navigationItem.rightBarButtonItems = [creeLigueBouton]            condition = true        }    }    override func viewDidLoad() {        super.viewDidLoad()        creeLigueBouton = UIBarButtonItem(title: "Creer", style: UIBarButtonItemStyle.Plain, target: self, action: "creerButtonMethod")        navigationItem.rightBarButtonItems = [creeLigueBouton]    }    func creerButtonMethod() {        print("Bonjour")    }}


// Nice answer haiLong, I think as an extension this is more convenient.extension UIBarButtonItem {    var isHidden: Bool {        get {            return !isEnabled && tintColor == .clear        }        set {            tintColor = newValue ? .clear : nil            isEnabled = !newValue        }    }}

EDIT: Removed forced unwrapping and fixed enabled value.