swiftconditional-statementsuibarbuttonitemiboutlet

Make a UIBarButtonItem disappear using swift IOS


I have an IBOutlet that I have linked to from the storyboard

@IBOutlet var creeLigueBouton: UIBarButtonItem!

and I want to make it disappear if a condition is true

if(condition == true)
{
    // Make it disappear
}

Solution

  • 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 UIKit
    
    class 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 UIKit
    
    class 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")
        }
    
    }