본문 바로가기
iOS

[Swift] 라디오버튼 만들기

by swiftyElly 2021. 4. 2.

지금 하고 있는 프로젝트에서 라디오 버튼을 쓰는 부분이 많았다. 처음에는 이 라이브러리를 사용했는데 많이 사용하다 보니 Xcode가 너무 느려져서 만들어보기로 했다!

미리보기

변수 선언

우선 UIButton을 스토리보드에 놓고 버튼1을 @IBOutlet으로 ViewController와 연결하는데, connection 종류를 Outlet Collection으로 지정해준다.

나머지 버튼들을 아래와 같이 radioButtons에 연결해주면 된다.

다 연결되었는지 확인해주자

indexOfOneAndOnly 변수는 nil을 사용할 예정이기 때문에 옵셔널로 선언해준다.

indexOfOneAndOnly 값으로 선택된 버튼이 있는지 없는지, 선택 되어 있는 버튼의 인덱스는 무엇인지 판단한다.

  • 값이 nil이면 어떤 버튼도 선택되지 않은 상태
  • 값이 숫자(인덱스)라면 radioButtons[인덱스]가 선택되어 있는 상태

를 의미한다.

로직

로직을 보자

  • 아무것도 선택되지 않은 상태 (indexOfOneAndOnly == nil)에서 버튼을 하나 누르면
    isSelected == false였을테니까 true로 바꿔주고 indexOfOneAndOnly에 선택한 버튼의 index 값을 넣어준다.

 

  • 한 버튼이 선택되어 있는 상태에서 버튼을 또 하나 누를 때
    • isSelected == true 라면 → 자기자신을 누른 것.
      false로 바꿔주고 indexOfOneAndOnlynil로 변경
    • isSelected == false 라면 → 새로운 버튼을 누른 것.
    • 우선 모든 버튼을 isSelected == false 로 바꿔주고, 선택한 버튼은 true로 변경. indexOfOneAndOnly에는 선택한 버튼의 index 값을 넣어준다.

생각보다 간단하다. 이제 코드를 작성해보자〰️

코드

우선 버튼을 @IBAction으로 연결한다. 모든 버튼이 touchButton에 연결되어 있어야 한다.

  1. 아무것도 선택되지 않은 상태를 구현해보자.

indexOfOneAndOnly == nil일 때 sender의 isSelectedtrue로 변경.
sender의 인덱스 값을 받아서 indexOfOneAndOnly 에 넣어준다.

  1. 한 버튼이 선택되어 있을 때

indexOfOneAndOnly != nil일 때 두 가지 경우가 있다.

1) 이미 선택되어 있는 버튼을 눌렀을 때 → 선택을 취소시켜야 함
2) 새로운 버튼을 눌렀을 때 → 이전에 선택된 버튼이 취소되고 새로운 버튼이 선택되어야 함

1) sender.isSelected == true라면 이미 선택되어 있는 버튼을 누른 것!
선택을 취소시켜야 하므로 false로 바꿔주고 아무것도 선택되지 않은 상태가 되었으니 nil로 변경

2) sender.isSelected == false라면 새로운 버튼을 누른 것!

이전에 선택되어 있던 버튼은 취소되어야 한다. for문으로 모든 radioButtons의 선택을 false로 설정해준 후 sender의 isSelectedtrue로 바꿔준다.
sender의 인덱스 값을 받아서 indexOfOneAndOnly 에 넣어준다.

이렇게 하면 끝❗️

 

⚡️소스 코드⚡️

 

brillantescene/iOS-Study

Contribute to brillantescene/iOS-Study development by creating an account on GitHub.

github.com

 

댓글