피커뷰를 사용하려면 컬럼의 갯수에 상관없이 UIPickerViewDataSource, UIPickerViewDelegate라는 프로토콜을 채택해야함.
먼저 UIPickerViewDataSource를 채택한 뷰 컨트롤러는 자기 자신을 피커뷰의 datasource로 등록해야한다.
뷰 컨트롤러가 피커뷰에 표시할 데이터와 UIPickerView사이의 다리 역할을 한다.
//피커뷰의 열 개수를 넘김
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return pickerViewCnt
}
//피커의 항목 개수를 넘김
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return self.StudentNumberList.StudentNumber.count
}
//피커내에 특정한 위치를 가리키게 될 때, 그 위치에 해당하는 문자열를 봔환
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return self.StudentNumberList.StudentNumber[row]
}
//pickr가 선택됬을 경우
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
self.selectStudentNumber = self.StudentNumberList.StudentNumber[row]
StudentNumberPicker.text = self.selectStudentNumber
}
//텍스트 필드가 선택되었을때 피커를 생성하는 메소드
func createPickerView(){
let pickerView = UIPickerView()
pickerView.delegate = self
StudentNumberPicker.inputView = pickerView
}
//사용자가 피커에서 항목을 고르고 선택버튼을 눌렀을때 작동할 메서드
@objc func onPickDone(){
selectStudentNumber = StudentNumberPicker.text!
StudentNumberPicker.resignFirstResponder()
print(selectStudentNumber)
}
//피커가 사라질 때를 정의하는 메서드
func dismissPickerView(){
let toolBar = UIToolbar()
toolBar.sizeToFit()
let button = UIBarButtonItem(title: "선택", style: .plain, target: self, action: #selector(self.onPickDone))
toolBar.setItems([button], animated: true)
toolBar.isUserInteractionEnabled = true
StudentNumberPicker.inputAccessoryView = toolBar
}