'Select/deselect buttons swift xcode 7

Part way done with learning swift but I hit a small wall and yet again, I'm sure I'm just a bit new at this and an easy solution is there but I'm having trouble figuring out how to select/deselect buttons below is what I have so far and it is a button turns into a checkmark when clicked on... I've gotten that far but I need that button to deselect when clicked on again and then obviously be able to be clicked again if need be.

@IBAction func buttonPressed(sender: AnyObject) {
    sender.setImage(UIImage(named: "Checkmark.png"), forState: .Normal)
}


Solution 1:[1]

Swift 3 note: .selected and .checked are now lower case UIControlState values in the SDK, and some of the methods have been renamed:

let button = UIButton()
button.setImage(UIImage(named: "Unchecked"), for: .normal)
button.setImage(UIImage(named: "Checked"), for: .selected)

You can also now use image literals with Xcode 8 instead of UIImage(named:):

#imageLiteral(resourceName: "Unchecked")

Swift 2:

Why not use the .Selected state of the button as the "checked" state, and the .Normal state as the "unchecked" state.

let button = UIButton()
button.setImage(UIImage(named: "Unchecked"), forState: .Normal)
button.setImage(UIImage(named: "Checked"), forState: .Selected)

// ...

@IBAction func buttonPressed(sender: AnyObject) {

    if let button = sender as? UIButton {
        if button.selected {
            // set deselected
            button.selected = false
        } else {
            // set selected
            button.selected = true
        }
    }
}

Solution 2:[2]

You dont need to set selected in condition. I just doing with following method in swift:

func selectDeselect(sender: UIButton){

        sender.selected = !sender.selected

        if(sender.selected == true)
        {
        sender.setImage(UIImage(named:"select_heart"), forState: UIControlState.Normal)

        }
        else
        {
        sender.setImage(UIImage(named:"heart"), forState: UIControlState.Normal)
        }

    }

Solution 3:[3]

Here is Working code for swift 4.

Make Sure you need to connect Button IBAction Outlet as UIButton and set default button image from storyboard whatever you want.

@IBAction func btnTapped(_ sender: UIButton) {

    if sender.currentImage == UIImage(named: "radio_unchecked"){

        sender.setImage(UIImage(named: "radio_checked"), for: .normal)

    }else{

        sender.setImage(UIImage(named: "radio_unchecked"), for: .normal)
    }
}

Solution 4:[4]

update for Swift 4+ :

let button = UIButton()
button.setImage(UIImage(named: "Unchecked"), forState: .Normal)
button.setImage(UIImage(named: "Checked"), forState: .Selected)

@IBAction func buttonPressed(sender: AnyObject) {
 if let button = sender {
            if button.isSelected {
                   // set deselected
                button.isSelected = false
               } else {
                   // set selected
                button.isSelected = true
               }
           }
}

Solution 5:[5]

Set uncheck image on default state from storyboard and check image on selected state from storyboard.

@IBAction func buttonPressed(sender: AnyObject) {
   buttonOutlet.isSelected = !buttonOutlet.isSelected
}

Solution 6:[6]

private(set) lazy var myButton: UIButton = {
    let button = UIButton()
    button.setImage(UIImage(named: "Unchecked"), for: .normal)
    button.setImage(UIImage(named: "Checked"), for: .selected)
    button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
    button.translatesAutoresizingMaskIntoConstraints = false
    return button
}()

@objc 
func buttonTapped(sender: AnyObject) {
    sender.isSelected.toggle()
}

Solution 7:[7]

To select only the pressed button out of three buttons and deselect the others when designated button is pressed.

@IBAction func buttonPressed(_ sender: UIButton) {
    
    // Deselect all buttons
    button1.isSelected = false
    button2.isSelected = false
    button3.isSelected = false
    // Select the pressed button
    sender.isSelected = true
    
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Community
Solution 2 Nitin Gohel
Solution 3 Nikunj Kumbhani
Solution 4 Erik Peruzzi
Solution 5 Archana SIngh
Solution 6 Arafin Russell
Solution 7 D. Mika