UIPickerView의 attributedTitleForRow와 viewForRow의 구분
4571 단어 iOSUIKitSwiftUIPickerView
소개
UITableViewCell과 같이 「이미지와 텍스트」를 나란히 하고 싶은 경우, attributedTitleForRow 를 사용하는 방법과 viewForRow 를 사용하는 방법의 어느 쪽을 채용해야 하는가.
결론
가로 줄의 경우, attributedTitleForRow로 끝내는 쪽이 구현의 간결함이 됩니다.
반대로 이미지가 텍스트 위나 아래에 배치되는 등 레이아웃이 복잡해지면 viewForRow를 사용해야 합니다.
여담: delegate 메서드가 호출되는 순서
그런데 UIPickerView delegate의 메소드가 호출되는 순서는 어땠습니까?
1. widthForComponent
우선, 행의 높이보다 먼저 폭을 지정하는 메소드가 불립니다.
func pickerView(_ pickerView: UIPickerView,
widthForComponent component: Int) -> CGFloat
2. rowHeightForComponent
둘째, 높이입니다. 여기에서는 확정된 width를 이용할 수 있습니다.
func pickerView(_ pickerView: UIPickerView,
rowHeightForComponent component: Int) -> CGFloat
3. titleForRow 등
실제로 행에 표시하는 내용을 지정하는 메소드를 호출합니다.
3종류 있습니다만, 만일 3개가 구현되고 있는 경우는, viewForRow > attributedTitleForRow > titleForRow 의 차례로 우선됩니다.
특히 어느 메소드를 사용할까를 지정할 필요는 없습니다. 코드를 작성하는 것만으로 우선순위가 높은 메소드를 호출합니다.
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString?
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
viewForRow 를 구현했을 경우는, attributedTitleForRow 이하는 무시됩니다.
attributedTitleForRow 와 titleForRow 를 구현하고 있는 경우, attributedTitleForRow 의 return 가 nil 의 경우는,titleForRow 가 불립니다.
관련
UIPickerViewDelegate Reference
구현 예 StringPickerPopover.swift
Reference
이 문제에 관하여(UIPickerView의 attributedTitleForRow와 viewForRow의 구분), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hsylife/items/347419104eba98ea2d10
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
가로 줄의 경우, attributedTitleForRow로 끝내는 쪽이 구현의 간결함이 됩니다.
반대로 이미지가 텍스트 위나 아래에 배치되는 등 레이아웃이 복잡해지면 viewForRow를 사용해야 합니다.
여담: delegate 메서드가 호출되는 순서
그런데 UIPickerView delegate의 메소드가 호출되는 순서는 어땠습니까?
1. widthForComponent
우선, 행의 높이보다 먼저 폭을 지정하는 메소드가 불립니다.
func pickerView(_ pickerView: UIPickerView,
widthForComponent component: Int) -> CGFloat
2. rowHeightForComponent
둘째, 높이입니다. 여기에서는 확정된 width를 이용할 수 있습니다.
func pickerView(_ pickerView: UIPickerView,
rowHeightForComponent component: Int) -> CGFloat
3. titleForRow 등
실제로 행에 표시하는 내용을 지정하는 메소드를 호출합니다.
3종류 있습니다만, 만일 3개가 구현되고 있는 경우는, viewForRow > attributedTitleForRow > titleForRow 의 차례로 우선됩니다.
특히 어느 메소드를 사용할까를 지정할 필요는 없습니다. 코드를 작성하는 것만으로 우선순위가 높은 메소드를 호출합니다.
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString?
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
viewForRow 를 구현했을 경우는, attributedTitleForRow 이하는 무시됩니다.
attributedTitleForRow 와 titleForRow 를 구현하고 있는 경우, attributedTitleForRow 의 return 가 nil 의 경우는,titleForRow 가 불립니다.
관련
UIPickerViewDelegate Reference
구현 예 StringPickerPopover.swift
Reference
이 문제에 관하여(UIPickerView의 attributedTitleForRow와 viewForRow의 구분), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hsylife/items/347419104eba98ea2d10
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
func pickerView(_ pickerView: UIPickerView,
widthForComponent component: Int) -> CGFloat
func pickerView(_ pickerView: UIPickerView,
rowHeightForComponent component: Int) -> CGFloat
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString?
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
UIPickerViewDelegate Reference
구현 예 StringPickerPopover.swift
Reference
이 문제에 관하여(UIPickerView의 attributedTitleForRow와 viewForRow의 구분), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hsylife/items/347419104eba98ea2d10텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)