델리게이트

: 대리자라고도 하며 누군가 해야 할일을 대신 해주는 역할

예를 들어 특정 객체와 상호 작용할 때 메시지를 넘기면 그 메시지에 대한 책임은 델리게이트로 위임됨

==> 즉 사용자가 객체를 터치했을 떄 해야 할 일을 델리게이트 메서드에 구현하고 해당 객체가 터치되었을 떄 델리게이트가 호출되어 위임받은 일을 함!!

  • 사용하기 위해 UIPickerViewDelegate 클래스를 상속

  • 만약 피커 뷰에 아무것도 나타나지 않는다면 UIPickerViewDataSource 프로토콜을 추가해보자

피커 뷰의

컴포넌트

:

피커 뷰에 표시되는 열의 개수

func numberOfComponents(in pickerView: UIPickerView) -> Int {

return 컴포넌트의 수

}

  • 피커 뷰에게 컴포넌트의 수를 정수 값으로 넘겨주는 델리게이트 메서드

func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {

return 컴포넌트의 높이

}

  • 피커 뷰에게 컴포넌트의 높이를 정수 값으로 넘겨주는 델리게이트 메서드

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

return 피커 뷰의 해당 열에서 선택할 수 있는 행의 개수

}

  • numberOfRowsInComponent 인수를 가지는 델리게이트 메서드

component 인수로 각 컴포넌트의 행의 개수를 다르게 할 수 있음

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

return 컴포넌트의 각 열의 타이틀

}

  • titleForRow 인수를 가지는 델리게이트 메서드

컴포넌트의 각 열의 타이틀을 문자열 값으로 넘겨줌

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {

return 컴포넌트의 각 열의 뷰

}

  • viewForRow 인수를 가지는 델리게이트 메서드

피커 뷰에게 컴포넌트의 각 열의 뷰를 UIView 타입의 값으로 넘겨줌

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

}

  • didSelectRow 인수가 포함된 델리게이트 메서드

사용자가 피커 뷰의 룰렛을 선택했을 때 호출됨

사용자가 선택한 피커 뷰의 row를 사용하여 원하는 일을 코딩

+) 컴포넌트 구분법

  • 피커 뷰의 컴포넌트 인수를 사용해서 구분

왼쪽부터 순서대로 0,1,2…의 값을 가짐

if (component == 0){

}

else{

}