// viewDidLoad에서 delegate, dataSource 준수
override func viewDidLoad() {
super.viewDidLoad()
regionPickerView.delegate = self
regionPickerView.dataSource = self
}
// 하나의 PickerView 안에 보여줄 Picker 갯수 지정
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 2
}
// 각 picker 마다 몇 개의 데이터를 보여줄 것인지 지정
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
switch component {
case 0:
return list.count
case 1:
return list[firstPickerRow].guList.count
default:
return 0
}
}
// 각 picker의 row에 보여줄 title 지정
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView == regionPickerView {
switch component {
case 0:
return list[row].city.rawValue
case 1:
return list[firstPickerRow].guList[row]
default:
return nil
}
} else {
return "-"
}
}
// picker를 스크롤하여 특정 row를 선택했을 때 진행하고 싶은 행위 지정
// - 여기에서는 row를 이동했을 때 resultLabel에 두 picker의 선택되어있는 title을 보여주도록 하였다.
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
switch component {
case 0:
firstPickerRow = row
let selectedItem = list[firstPickerRow]
let city = selectedItem.city.rawValue
address = (city, nil)
regionPickerView.reloadAllComponents()
case 1:
let selectedItem = list[firstPickerRow]
address.gu = selectedItem.guList[row]
default:
return
}
resultLabel.text = "\(address.city ?? "-") \(address.gu ?? "-")"
}
반응형
'iOS' 카테고리의 다른 글
[iOS] present를 push처럼, dismiss를 pop 처럼 (4) | 2022.07.11 |
---|---|
iOS 에서의 MVC, MVP, MVVM 변천사 간단 정리 - iOS (0) | 2022.05.05 |
ARC & Retain Cycle 예제로 살펴보기 - iOS (2) | 2022.04.17 |
Push Notification 과 APNS - iOS (0) | 2022.04.14 |
[ScrollView] Auto Layout 설정이 어렵다면 이걸 보세요! - iOS (1) | 2021.11.18 |