VincentS
VincentS

Reputation: 3

Swift Radio Buttons - CheckBoxes - Swift 3

I work on Swift 3, and I'm trying to make checkboxes that behave like radio buttons. I explain myself : I have 8 buttons ; each has an "unchecked" image and a "checked" image. I want only 1 button to be selected (so, showing ITS "checked" image) at the time. The principle of radio buttons. So I tried using the @IBAction with each button, I've this :

@IBAction func tona1_changed(_ sender: Any) {
 if test_tona1.isSelected == true
        {
            test_tona1.setBackgroundImage(UIImage(named: "0b_unchecked"), for: UIControlState.normal)

            test_tona1.isSelected = false
        }
        else
        {
            test_tona1.setBackgroundImage(UIImage(named: "0b_checked"), for: UIControlState.normal)

            test_tona1.isSelected = true
        }}

It actually make the image switch between "uncheck" and "check" but I don't know at all how to make it interact with the other buttons. I tried using an array with the buttons's tags inside but I didn't have something working. I also tried to make a class but I don't know how it can work. Thanks!

Upvotes: 0

Views: 943

Answers (1)

Yoam Farges
Yoam Farges

Reputation: 773

You can achieve that in several ways. One of the most trivial would be to:

  • Have a datasource. Most of the time an array.
  • Create an UIButton for each item in your datasource, and insert each button into another array. Each button would have a tag corresponding at the index of the array. Also set different images for selected state and normal.
  • Add an action for each button, with the target function being something like:

    func buttonPressed(sender:UIButton) {
        for button in buttons {
            button.isSelected = false
            // deselect your model datasource[button.tag]
        }
    
        sender.isSelected = true
        // select your model datasource[button.tag]
    }
    

I leave the abstraction / improvements / safety to you. The key point is just to use a collection of buttons, iterate through them, and select / deselect them accordingly, and not using a big if/else checking for the button tag everytime.

Upvotes: 1

Related Questions