2017-09-12 4 views
3

데이터를 데이터베이스에 저장하기 전에 변수에 A/B 값을 설정하는 데 사용하려는 두 개의 UIButton이 있습니다. 탭을 두 드릴 때 버튼을 선택하고 다른 버튼을 탭하면 선택 해제하고, 그 반대도 마찬가지입니다. 프로그래밍 방식으로 또는 Interface Builder에서이 작업을 수행하기위한 좋은 솔루션은 무엇입니까?Swift에서 두 개의 UIButton을 라디오 버튼처럼 수행하려면 어떻게해야합니까?

+1

가'UISegmentedControl'을 고려 만들기 두 버튼

@IBAction func btnYesNoTapped(_ sender: UIButton) { if sender.tag == 1 { self.IsBtnSelected(isSelect: true, with: self.btnYes) }else { self.IsBtnSelected(isSelect: true, with: self.btnNo) } } 

에 대한 공통 @IBAction 방법을 구현합니다. – rmaddy

답변

2

언급 한 것처럼 "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 단추 중

0

당신은 내가 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 
    } 
0

라디오 단추 동작을 만들기 위해 다음과 같은 기능을 사용할 수 있습니다. 선택해야 할 콘센트는 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 
     } 
    } 
} 
0

iOS의 경우 수동으로해야합니다.아래 접근 방법을 참조하십시오.

  1. 스위치를 사용하십시오. 옵션이 켜기/끄기 상태를 나타내는 경우 UISwitch를 사용하는 것이 좋습니다.
  2. 단추를 누를 때와 같은 방법을 사용하십시오. 메서드가 호출 될 때마다 다른 버튼/버튼의 선택을 해제하고 누른 버튼을 선택합니다. 태그를 사용하거나 버튼 참조를 유지하여 태그를 구별 할 수 있습니다.
  3. 마지막으로 각 단추마다 다른 방법을 사용하십시오. 버튼을 누를 때마다 다른 버튼의 선택을 취소하십시오.

인터페이스 작성기를 사용하거나 프로그래밍 방식으로 위의 방법을 사용할 수 있습니다.

1

시도해보십시오.

먼저 버튼 분리 @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 
}