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?
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:

Radio Buttons
Radio Buttons can be solved in a similar way.
For example, the classic gender selection Woman - Man:

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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With