Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create radio buttons and checkbox in swift (iOS)?

I am developing an app that allows to do survey. My layout is generated from XML based questions.

I need to create radio buttons (single choice) and checkboxes (multiple answers). I did not find anything useful for swift.

Does anyone have an idea?

like image 795
Vannian Avatar asked Mar 18 '15 09:03

Vannian


1 Answers

Checkbox

You can create your own CheckBox control extending UIButton with Swift:

import UIKit  class CheckBox: UIButton {     // Images     let checkedImage = UIImage(named: "ic_check_box")! as UIImage     let uncheckedImage = UIImage(named: "ic_check_box_outline_blank")! as UIImage          // Bool property     var isChecked: Bool = false {         didSet {             if isChecked == true {                 self.setImage(checkedImage, for: UIControl.State.normal)             } else {                 self.setImage(uncheckedImage, for: UIControl.State.normal)             }         }     }              override func awakeFromNib() {         self.addTarget(self, action:#selector(buttonClicked(sender:)), for: UIControl.Event.touchUpInside)         self.isChecked = false     }              @objc func buttonClicked(sender: UIButton) {         if sender == self {             isChecked = !isChecked         }     } } 

And then add it to your views with Interface Builder:

enter image description here

Radio Buttons

Radio Buttons can be solved in a similar way.

For example, the classic gender selection Woman - Man:

enter image description here

import UIKit  class RadioButton: UIButton {     var alternateButton:Array<RadioButton>?          override func awakeFromNib() {         self.layer.cornerRadius = 5         self.layer.borderWidth = 2.0         self.layer.masksToBounds = true     }          func unselectAlternateButtons() {         if alternateButton != nil {             self.isSelected = true                          for aButton:RadioButton in alternateButton! {                 aButton.isSelected = false             }         } else {             toggleButton()         }     }          override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {         unselectAlternateButtons()         super.touchesBegan(touches, with: event)     }          func toggleButton() {         self.isSelected = !isSelected     }          override var isSelected: Bool {         didSet {             if isSelected {                 self.layer.borderColor = Color.turquoise.cgColor             } else {                 self.layer.borderColor = Color.grey_99.cgColor             }         }     } } 

You can init your radio buttons like this:

    override func awakeFromNib() {         self.view.layoutIfNeeded()                  womanRadioButton.selected = true         manRadioButton.selected = false     }          override func viewDidLoad() {         womanRadioButton?.alternateButton = [manRadioButton!]         manRadioButton?.alternateButton = [womanRadioButton!]     } 

Hope it helps.

like image 98
crubio Avatar answered Oct 01 '22 14:10

crubio