Protocol UIPickerViewDelegate
: 픽커뷰의 표시되는 텍스트와 그것을 선택했을 때의 동작을 설정할 수 있는 델리게이트 프로토콜.
현재 픽커뷰는 ’?’ 만을 표시한다. 우리가 원하는 텍스트를 표시하려면 UIPickerViewDelegate 를 이용해야 한다. 이것도 UIPickerViewDataSource 와 마찬가지로 프로토콜이다.
동일한 방법으로 현재의 뷰컨트롤러를 UIPickerViewDelegate로 지정해보자.
아래는 옵셔널한 메서드이므로 구현하지 않아도 에러는 발생하지 않지만 기본적인 기능구현을 하려면 필요한 메서드이다.
class ViewController: UIViewController, UIPickerViewDataSource,
UIPickerViewDelegate {
...
// 픽커뷰에 표시될 텍스트를 "Korea"로 설정했다.
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return "Korea"
}
// 텍스트를 선택할 때 "selected" 가 콘솔에 출력되도록 설정했다.
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
print("selected")
}
여기서 잠깐 브레이크 포인트라는 기능을 알아보자.
브레이크 포인트는 디버깅할때 유용한 기능인데 동작원리를 익힐겸 간단히 사용해보자.

에디터에서 좌측바를 클릭해보면 파란 깃발모양의 브레이크 포인트가 생성된다.
이것을 설정해 놓으면 실행시에 해당 라인의 코드를 실행하기전에 동작을 멈추고 여러가지 액션을 수행할 수 있는데 여기서는 간단히 로그메시지를 콘솔에 출력해보도록 하겠다.
브레이크 포인트 생성후 더블클릭하거나 마우스 우측 버튼을 클릭해서 ’edit breakpoint’를 선택하면 설정창이 표시되는데 그림처럼 설정을 변경해보자. 여기서 ’@row@’ 는 해당 메서드의 인자인 ‘row’를 출력하는 것이고 하단의 옵션을 체크하면 해당 브레이크 포인트에서 액션 수행후 멈추지 않고 진행한다. (브레이크 포인트를 삭제하려면 바깥으로 drag&drop)
앱을 실행해서 구현한대로 잘 동작하는지 테스트 해보고 특히 픽커뷰의 아이템을 변경하면서 해당라인의 숫자가 콘솔에 출력되는 것을 확인해보자.
이렇게 프로토콜의 메서드를 구현해놓으면 따로 그 메서드를 호출하지 않더라도 시스템에서 자동으로 인자를 입력하여 해당 메서드를 실행시키는데 이것이 이전에도 다루어본 콜백메서드의 개념이다.
픽커뷰를 어떻게 구현하는지에 대한 도입부분을 다루어 보았지만 이것만으로는 상당히 부족함을 느낄 것이다. 행마다 다른 텍스트가 표시되고 선택에 따라 다른 동작을 해야 하기 때문이다.
더 진행하기 전에 픽커뷰가 구현되는 원리에 대해 확실히 이해할 필요가 있다.