프로그래밍 방식으로 UISegmentedControl 추가하기
iOS 앱에서 Swift를 사용해 UISegmentedControl을 코드로 추가하려면 크게 두 가지 작업이 필요합니다. 첫 번째는 세그먼트 컨트롤 인스턴스를 생성하는 것이고, 두 번째는 사용자가 세그먼트를 탭했을 때 동작할 액션 메서드를 연결하는 것입니다.
아래에서 단계별로 자세히 살펴보겠습니다.
1단계: 세그먼트 컨트롤 생성 함수 작성
먼저 화면에 세그먼트 컨트롤을 추가하는 함수를 만들어 보겠습니다. 이 함수 안에서는 표시할 항목 목록을 정의하고, 컨트롤의 위치와 크기를 지정한 뒤, 액션을 등록합니다.
func addControl() {
let segmentItems = ["First", "Second"]
let control = UISegmentedControl(items: segmentItems)
control.frame = CGRect(x: 10, y: 250, width: (self.view.frame.width - 20), height: 50)
control.addTarget(self, action: #selector(segmentControl(_:)), for: .valueChanged)
control.selectedSegmentIndex = 1
view.addSubview(control)
}코드를 살펴보면 다음과 같은 흐름으로 동작합니다.
- segmentItems: 세그먼트에 표시될 항목 이름들을 배열로 정의합니다.
- control.frame: x 좌표 10, y 좌표 250 위치에 화면 너비에서 좌우 여백 20을 뺀 크기, 높이 50으로 프레임을 설정합니다.
- addTarget: 값이 변경될 때(
.valueChanged) 호출될 액션 메서드를 등록합니다. - selectedSegmentIndex = 1: 초기 선택 상태를 두 번째 세그먼트로 지정합니다.
- view.addSubview(control): 완성된 컨트롤을 현재 뷰 계층에 추가합니다.
2단계: 뷰 컨트롤러에서 함수 호출
작성한 addControl() 함수는 뷰 컨트롤러의 viewDidLoad() 같은 적절한 시점에 호출하면 됩니다. 이렇게 하면 화면이 로드되는 즉시 세그먼트 컨트롤이 나타납니다.
3단계: 세그먼트 선택 액션 구현
다음으로 사용자가 세그먼트를 탭했을 때 실행될 액션 메서드를 구현해야 합니다. @objc 속성을 붙여 Objective-C 런타임에서도 접근 가능하도록 하는 것이 중요합니다.
@objc func segmentControl(_ segmentedControl: UISegmentedControl) {
switch (segmentedControl.selectedSegmentIndex) {
case 0:
// 첫 번째 세그먼트가 탭되었을 때 처리
break
case 1:
// 두 번째 세그먼트가 탭되었을 때 처리
break
default:
break
}
}selectedSegmentIndex 값을 기준으로 switch 문을 사용해 각 세그먼트마다 원하는 동작을 분기 처리할 수 있습니다. 예를 들어 첫 번째 세그먼트에서는 목록 뷰를, 두 번째 세그먼트에서는 그리드 뷰를 보여주는 식의 UI 전환에 활용할 수 있습니다.
실행 결과 확인
위 코드를 iOS 시뮬레이터에서 실행하면 아래와 같은 결과가 출력됩니다. 화면 하단에 "First"와 "Second" 두 개의 세그먼트가 표시되며, 두 번째 세그먼트가 기본적으로 선택된 상태로 나타납니다.

마무리
이처럼 UISegmentedControl은 스토리보드 없이도 몇 줄의 코드만으로 손쉽게 구현할 수 있습니다. 인터페이스 빌더 대신 코드로 UI를 구성하면 버전 관리가 용이하고, 동적으로 항목을 변경하기도 쉽다는 장점이 있습니다. 실제 프로젝트에서는 Auto Layout 제약 조건을 함께 적용해 다양한 화면 크기에 대응하는 것이 좋습니다.