데이터를 데이터베이스에 저장하기 전에 변수에 A/B 값을 설정하는 데 사용하려는 두 개의 UIButton
이 있습니다. 탭을 두 드릴 때 버튼을 선택하고 다른 버튼을 탭하면 선택 해제하고, 그 반대도 마찬가지입니다. 프로그래밍 방식으로 또는 Interface Builder에서이 작업을 수행하기위한 좋은 솔루션은 무엇입니까?Swift에서 두 개의 UIButton을 라디오 버튼처럼 수행하려면 어떻게해야합니까?
답변
언급 한 것처럼 "A/B 값"을 설정하려면 가장 쉬운 옵션은 UISwitch
또는 가능한 두 가지 옵션 인 -을 사용하는 것입니다 (질문에 @rmaddy로 제안 됨). 코멘트) .
이러한 컨트롤에는 찾고있는 기능 중 하나만 선택하는 기능이 내장되어 있습니다. 스위치의
단점은 다음과 같습니다
- 그것은 또는 해제되어야한다 ("도 A 및 B"의 선택 상태를 지원하지 않습니다)
- 당신은 별도의 제목을 가질 수 없습니다 각 상태에 대한 라벨. 여전히 두 개의 별도
UIButton
인스턴스를 원하는 경우
수행 할 수 있습니다
:는 예를 들어, 뷰 컨트롤러에있는 두 버튼을 refeences을 (
@IBOutlet
의이 인터페이스 빌더를 사용하여 유선), 되세요@IBOutlet weak var leftButton: UIButton! @IBOutlet weak var rightButton: UIButton!
두 단추 모두에 대해 action 메서드를 구현하여 selec을 설정합니다. 탭된 버튼의 상태를 재설정하고 다른 버튼을 재설정합니다. 예를 들어 :
@IBAction func buttonActon(sender: UIButton) { if sender == leftButton { leftButton.isSelected = true rightButton.isSelected = false } else if sender == rightButton{ leftButton.isSelected = false rightButton.isSelected = true } }
이것은 단지 두 개의 버튼에 대한 빠른 - 및 - 더러운 솔루션입니다. 일반적인 라디오 그룹 n 단추 중
당신은 내가 TableView
에있는 날짜에 대해 그것을 구현 한
cellForRow
에서 이제
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()
}
enum filterDateSelectableOptions:Int {
case AssignDate
case DueDate
case CompletionDate
}
//Assign Date selected by default
var currentSelectedFilterDate:filterDateSelectableOptions = .AssignDate
할 필요가처럼 달성 할 수
// 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입니다. 및이 기능에 대한 두 콘센트 배열. ofcolor 대신에 이미지를 비교하고 이미지를 설정할 수도 있습니다. 필요한 값을 얻으려면 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의 경우 수동으로해야합니다.아래 접근 방법을 참조하십시오.
- 스위치를 사용하십시오. 옵션이 켜기/끄기 상태를 나타내는 경우 UISwitch를 사용하는 것이 좋습니다.
- 단추를 누를 때와 같은 방법을 사용하십시오. 메서드가 호출 될 때마다 다른 버튼/버튼의 선택을 해제하고 누른 버튼을 선택합니다. 태그를 사용하거나 버튼 참조를 유지하여 태그를 구별 할 수 있습니다.
- 마지막으로 각 단추마다 다른 방법을 사용하십시오. 버튼을 누를 때마다 다른 버튼의 선택을 취소하십시오.
인터페이스 작성기를 사용하거나 프로그래밍 방식으로 위의 방법을 사용할 수 있습니다.
시도해보십시오.
먼저 버튼 분리 @IBOutlet을 만듭니다.
@IBOutlet weak var btnYes: UIButton!
@IBOutlet weak var btnNo: UIButton!
양쪽 단추 태그 설정 이처럼 스토리 보드를 사용하여 태그를 설정할 수도 있습니다.
override func viewDidLoad() {
super.viewDidLoad()
btnYes.tag = 1
btnNo.tag = 2
}
는 손님 여러분 방법
func IsBtnSelected(isSelect:Bool,with sender:UIButton){
self.btnYes.isSelected = false
self.btnNo.isSelected = false
sender.isSelected = isSelect
}
가'UISegmentedControl'을 고려 만들기 두 버튼
에 대한 공통 @IBAction 방법을 구현합니다. – rmaddy