如何在swift(iOS)中创build单选button和checkbox?

我正在开发一个允许进行调查的应用程序。 我的布局是从基于XML的问题生成的。

我需要创build单选button(单选)和checkbox(多个答案)。 我没有发现任何有用的迅速。

有没有人有一个想法?

对于单选button和checkbox,没有内置任何东西。

你可以自己实现checkbox。 你可以为UIControlStateNormal设置一个uncheckedImage,为你的UIControlStateSelected设置一个checkedImage。 现在点击button将改变它的图像,并在选中和未选中的图像之间交替。

要使用单选button,必须为所有button保留一个Array ,作为单选button。 无论何时按下button,您都需要取消选中arrays中的所有其他button。

对于单选button,您可以使用SSRadioButtonsController您可以创build一个控制器对象并向其添加button数组

 var radioButtonController = SSRadioButtonsController() radioButtonController.setButtonsArray([button1!,button2!,button3!]) 

主要原理是这样的。

checkbox

你可以创build你自己的CheckBox控件,用Swift扩展UIButton( 编辑成Swift 3 ):

 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: UIControlState.normal) } else { self.setImage(uncheckedImage, for: UIControlState.normal) } } } override func awakeFromNib() { self.addTarget(self, action:#selector(buttonClicked(sender:)), for: UIControlEvents.touchUpInside) self.isChecked = false } func buttonClicked(sender: UIButton) { if sender == self { isChecked = !isChecked } } } 

然后使用Interface Builder将其添加到您的视图中:

在这里输入图像说明

单选button

单选button可以用类似的方法解决。

例如,经典的性别select女人

在这里输入图像说明

 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 } } } } 

你可以像这样初始化你的单选button:

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

希望能帮助到你。

检查出DLRadioButton 。 您可以直接从Interface Builder添加和自定义单选button。 也适用于Swift完美。

适用于iOS的Swift单选按钮

更新:版本1.3.2添加方形button,也提高了性能。

更新:版本1.4.4增加了多选选项,也可以用作checkbox。

更新:版本1.4.7增加了RTL语言支持。

有一个非常好的库,你可以使用它(你可以使用它来代替UISwitch ): https : //github.com/Boris-Em/BEMCheckBox

安装很简单:

 BEMCheckBox *myCheckBox = [[BEMCheckBox alloc] initWithFrame:CGRectMake(0, 0, 50, 50)]; [self.view addSubview:myCheckBox]; 

它提供了圆形和方形checkbox

在这里输入图像说明

它也做animation:

在这里输入图像说明

一个非常简单的checkbox控件。

  @IBAction func btn_box(sender: UIButton) { if (btn_box.selected == true) { btn_box.setBackgroundImage(UIImage(named: "box"), forState: UIControlState.Normal) btn_box.selected = false; } else { btn_box.setBackgroundImage(UIImage(named: "checkBox"), forState: UIControlState.Normal) btn_box.selected = true; } } 

创build单选button的步骤

BasicStep:采取两个button。 设置图像为喜欢select和未选中。 比向两个button添加动作。 现在开始代码

1)创buildvariables:

 var btnTag : Int = 0 

2)在ViewDidLoad中定义:

  btnTag = btnSelected.tag 

3)现在在选定的点击动作:

  @IBAction func btnSelectedTapped(sender: AnyObject) { btnTag = 1 if btnTag == 1 { btnSelected.setImage(UIImage(named: "icon_radioSelected"), forState: .Normal) btnUnSelected.setImage(UIImage(named: "icon_radioUnSelected"), forState: .Normal) btnTag = 0 } } 

4)做代码UnCheckbutton

  @IBAction func btnUnSelectedTapped(sender: AnyObject) { btnTag = 1 if btnTag == 1 { btnUnSelected.setImage(UIImage(named: "icon_radioSelected"), forState: .Normal) btnSelected.setImage(UIImage(named: "icon_radioUnSelected"), forState: .Normal) btnTag = 0 } } 

单选button准备好了

较短的ios swift 4版本:

 @IBAction func checkBoxBtnTapped(_ sender: UIButton) { if checkBoxBtn.isSelected { checkBoxBtn.setBackgroundImage(#imageLiteral(resourceName: "ic_signup_unchecked"), for: .normal) } else { checkBoxBtn.setBackgroundImage(#imageLiteral(resourceName: "ic_signup_checked"), for:.normal) } checkBoxBtn.isSelected = !checkBoxBtn.isSelected }