在将数据保存到数据库之前,我想要使用两个UIButton
来将A / B值设置为变量。我想要一个按钮在点击时被选中,并在点击另一个按钮时取消选择,反之亦然。以编程方式或在Interface Builder中完成此任务的好方法是什么?
答案 0 :(得分:3)
为了设置你提到的“A / B值”,最简单的选择是使用UISwitch
或-in可能超过2个选项的一般情况 - UISegmentedControl
(正如@rmaddy在问题的评论中所建议的那样)。
这些控件内置了“您只需选择其中一项”功能。
开关的缺点是:
如果您仍想要两个单独的UIButton
个实例,则可以:
引用视图控制器中的两个按钮(使用Interface Builder连接@IBOutlet
),例如:
@IBOutlet weak var leftButton: UIButton!
@IBOutlet weak var rightButton: UIButton!
为这两个按钮实现操作方法,使其设置所点击按钮的选定状态,并重置另一个按钮。例如:
@IBAction func buttonAction(sender: UIButton) {
if sender == leftButton {
leftButton.isSelected = true
rightButton.isSelected = false
} else if sender == rightButton{
leftButton.isSelected = false
rightButton.isSelected = true
}
}
对于两个按钮,这是一个快速而肮脏的解决方案。如果你想要一个通用的无线电组的n按钮,GitHub上有开源解决方案......等等。
答案 1 :(得分:1)
试试这个。
首先创建两个单独的@IBOutlet按钮。
@IBOutlet weak var btnYes: UIButton!
@IBOutlet weak var btnNo: UIButton!
设置两个按钮标签就像这样,您还可以使用故事板设置标签。
override func viewDidLoad() {
super.viewDidLoad()
btnYes.tag = 1
btnNo.tag = 2
}
为两个按钮实现Common @IBAction方法
@IBAction func btnYesNoTapped(_ sender: UIButton) {
if sender.tag == 1 {
self.IsBtnSelected(isSelect: true, with: self.btnYes)
}else {
self.IsBtnSelected(isSelect: true, with: self.btnNo)
}
}
创建客户方法
func IsBtnSelected(isSelect:Bool,with sender:UIButton){
self.btnYes.isSelected = false
self.btnNo.isSelected = false
sender.isSelected = isSelect
}
答案 2 :(得分:0)
你可以像下面那样实现它
我已经为TableView
中的日期实施了它,您只需要做一些修改
enum filterDateSelectableOptions:Int {
case AssignDate
case DueDate
case CompletionDate
}
//Assign Date selected by default
var currentSelectedFilterDate:filterDateSelectableOptions = .AssignDate
现在
func btnRadioButtonTapped(sender:UIButton) {
switch sender.tag {
case kTableViewRow.AssignDate.rawValue:
self.currentSelectedFilterDate = .AssignDate
case kTableViewRow.DueDate.rawValue:
self.currentSelectedFilterDate = .DueDate
case kTableViewRow.CompletionDate.rawValue :
self.currentSelectedFilterDate = .CompletionDate
default:
break;
}
//sender.isSelected = !sender.isSelected
self.tblFilterList.reloadData()
}
在cellForRow
我有
// THIS IS DIFFERENT ENUM SO +1 is required in my case
case .AssignDate,.DueDate,.CompletionDate :
let button = buttonRadioCircle
button.tag = row.rawValue
cell.accessoryView = button
button.addTarget(self, action: #selector(btnRadioButtonTapped(sender:)), for: .touchUpInside)
button.isSelected = self.currentSelectedFilterDate.rawValue + 1 == row.rawValue
}
答案 3 :(得分:0)
您可以使用以下功能创建单选按钮行为,您必须选择btn outlet和此功能的两个出口阵列。而不是颜色,你也可以比较图像和设置图像。获取所需的值你可以在viewcontroller中创建一个变量,并在btn的IBAction中为这个变量赋值,你可以从IBAction调用这个函数。
func radioButton(_ btnToBeSelected: UIButton, _ btnArray: [UIButton]) {
for btn in btnArray {
if btn == btnToBeSelected {
btn.backgroundColor = UIColor.black
//selected btn
//You can also set btn images by
//btn.setImage(<#T##image: UIImage?##UIImage?#>, for: <#T##UIControlState#>)
} else {
btn.backgroundColor = UIColor.red
//not selected btn
}
}
}
答案 4 :(得分:0)
在iOS中,您必须手动执行此操作。请参阅以下方法,
您可以使用界面生成器或以编程方式执行上述方法。