델리게이트
: 대리자라고도 하며 누군가 해야 할일을 대신 해주는 역할
예를 들어 특정 객체와 상호 작용할 때 메시지를 넘기면 그 메시지에 대한 책임은 델리게이트로 위임됨
==> 즉 사용자가 객체를 터치했을 떄 해야 할 일을 델리게이트 메서드에 구현하고 해당 객체가 터치되었을 떄 델리게이트가 호출되어 위임받은 일을 함!!
-
사용하기 위해 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{
}
댓글