[英]How do I make two UIButtons perform like radio buttons in Swift?
在將數據保存到數據庫之前,我想要使用兩個UIButton
來將A / B值設置為變量。 我想要一個按鈕在點擊時被選中,並在點擊另一個按鈕時取消選擇,反之亦然。 以編程方式或在Interface Builder中完成此任務的好方法是什么?
為了設置你提到的“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-button 無線電組 ,GitHub上有開源解決方案......
試試這個。
首先創建兩個單獨的@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
}
你可以像下面這樣實現它
我已經為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
}
你可以使用以下功能來創建一個單選按鈕行為,你必須選擇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
}
}
}
在iOS中,您必須手動執行此操作。請參閱以下方法,
您可以使用界面生成器或以編程方式遵循上述方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.