지금 하고 있는 프로젝트에서 라디오 버튼을 쓰는 부분이 많았다. 처음에는 이 라이브러리를 사용했는데 많이 사용하다 보니 Xcode가 너무 느려져서 만들어보기로 했다!
미리보기
변수 선언
우선 UIButton을 스토리보드에 놓고 버튼1을 @IBOutlet으로 ViewController와 연결하는데, connection 종류를 Outlet Collection으로 지정해준다.
나머지 버튼들을 아래와 같이 radioButtons에 연결해주면 된다.
다 연결되었는지 확인해주자
indexOfOneAndOnly
변수는 nil
을 사용할 예정이기 때문에 옵셔널로 선언해준다.
indexOfOneAndOnly
값으로 선택된 버튼이 있는지 없는지, 선택 되어 있는 버튼의 인덱스는 무엇인지 판단한다.
- 값이
nil
이면 어떤 버튼도 선택되지 않은 상태 - 값이 숫자(인덱스)라면
radioButtons[인덱스]
가 선택되어 있는 상태
를 의미한다.
로직
로직을 보자
- 아무것도 선택되지 않은 상태 (
indexOfOneAndOnly == nil
)에서 버튼을 하나 누르면isSelected == false
였을테니까true
로 바꿔주고indexOfOneAndOnly
에 선택한 버튼의 index 값을 넣어준다.
- 한 버튼이 선택되어 있는 상태에서 버튼을 또 하나 누를 때
isSelected == true
라면 → 자기자신을 누른 것.false
로 바꿔주고indexOfOneAndOnly
는nil
로 변경isSelected == false
라면 → 새로운 버튼을 누른 것.- 우선 모든 버튼을
isSelected == false
로 바꿔주고, 선택한 버튼은true
로 변경.indexOfOneAndOnly
에는 선택한 버튼의 index 값을 넣어준다.
생각보다 간단하다. 이제 코드를 작성해보자〰️
코드
우선 버튼을 @IBAction으로 연결한다. 모든 버튼이 touchButton에 연결되어 있어야 한다.
- 아무것도 선택되지 않은 상태를 구현해보자.
indexOfOneAndOnly == nil
일 때 sender의 isSelected
를 true
로 변경.
sender의 인덱스 값을 받아서 indexOfOneAndOnly
에 넣어준다.
- 한 버튼이 선택되어 있을 때
indexOfOneAndOnly != nil
일 때 두 가지 경우가 있다.
1) 이미 선택되어 있는 버튼을 눌렀을 때 → 선택을 취소시켜야 함
2) 새로운 버튼을 눌렀을 때 → 이전에 선택된 버튼이 취소되고 새로운 버튼이 선택되어야 함
1) sender.isSelected == true
라면 이미 선택되어 있는 버튼을 누른 것!
선택을 취소시켜야 하므로 false
로 바꿔주고 아무것도 선택되지 않은 상태가 되었으니 nil
로 변경
2) sender.isSelected == false
라면 새로운 버튼을 누른 것!
이전에 선택되어 있던 버튼은 취소되어야 한다. for문으로 모든 radioButtons
의 선택을 false
로 설정해준 후 sender의 isSelected
를 true
로 바꿔준다.
sender의 인덱스 값을 받아서 indexOfOneAndOnly
에 넣어준다.
이렇게 하면 끝❗️
⚡️소스 코드⚡️
댓글