반응형
UITableViewDelegate
선택 항목 관리, 섹션의 header 및 footer 구성, 셀 삭제 및 순서 변경, 테이블 뷰에서 다른 작언 수행에 대한 프로토콜
@MainActor protocol UITableViewDelegate
- 테이블 뷰 delegate 객체는 UITableViewDelegate 프로토콜을 채택한다.
- 테이블 뷰 delegate는 테이블 뷰의 모양과 동작을 관리하기에 MVC 디자인 패턴 중, Controller와 관련이 있다.
- delegate는 테이블 뷰의 시각적인 부분 설정, 행의 액션관리, 액세서리 뷰 지원 그리고 테이블 뷰의 개별 행 편집을 도와준다.
- UITableViewDelegate 프로토콜의 주요 메서드는 다음과 같다. 필수로 구현해야 하는 메서드는 존재하지 않는다.
// 행이 선택되었을 때 호출되는 메서드
optional func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
// 행이 선택 해제되었을 때 호출되는 메서드
optional func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)
// 특정 위치 행의 높이를 묻는 메서드
optional func tableView(_ tableView: UITableView,heightForRowAt indexPath: IndexPath) -> CGFloat
// 지정된 섹션의 헤더 뷰 또는 푸터 뷰에 표시할 View가 어떤 건지 묻는 메서드
optional func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
optional func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView?
// 지정된 섹션의 헤더 뷰 또는 푸터 뷰의 높이를 묻는 메서드
optional func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
optional func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat
// 테이블 뷰가 편집 모드에 들어갔을 때 호출되는 메서드
optional func tableView(_ tableView: UITableView, willBeginEditingRowAt indexPath: IndexPath)
// 테이블 뷰가 편집 모드에서 빠져나왔을 때 호출되는 메서드
optional func tableView(_ tableView: UITableView, didEndEditingRowAt indexPath: IndexPath?)
// 테이블 뷰가 셀을 사용하여 행을 그리기 직전에 호출되는 메서드
optional func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
// 테이블 뷰로부터 셀이 화면에 사라지면 호출되는 메서드
optional func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath)
UITableViewDataSource
객체가 데이터를 관리하고 테이블 뷰에 셀을 제공하기 위해 채택하는 프로토콜
@MainActor protocol UITableViewDataSource
- 데이터 소스는 테이블 뷰를 생성하고 수정하는데 필요한 정보를 테이블 뷰 객체에 제공한다.
- MVC 디자인 패턴 중, Model과 관련이 있다.
- UITableView 객체에 섹션의 수와 행의 수를 알려주며, 행의 삽입, 삭제 및 재정렬하는 기능을 선택적으로 구현할 수 있다.
- UITableViewDataSource를 채택할 경우 필수로 구현해야 하는 메서드가 존재한다.
// 각 섹션에 표시할 행의 개수를 묻는 메서드 (필수!!)
func tableView(_ tableView: UITableView, numberOfRowInSection section: Int) -> Int
// 특정 인덱스 Row의 cell에 대한 정보를 넣어 cell을 반환하는 메서드 (필수!!)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
// 총 섹션 개수를 묻는 메서드
optional func numberOfSections(in tableView: UITableView) -> Int
// 특정 섹션의 헤더 타이틀을 묻는 메서드
optional func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
// 특정 섹션의 풋터 타이틀을 묻는 메서드
optional func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String?
// 특정 위치의 행이 편집 가능한지 묻는 메서드
optional func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool
// 특정 위치의 행을 재정렬 할 수 있는지 묻는 메서드
optional func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool
// 테이블 뷰 섹션 인덱스 타이틀을 묻는 메서드
optional func sectionIndexTitles(for tableView: UITableView) -> [String]?
// 인덱스에 해당하는 섹션을 알려주는 메서드
optional func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int
// 스와이프 모드, 편집 모드에서 버튼을 선택하면 호출 되는 메서드
// 해당 메서드에서는 행에 변경사항을 Commit 해야 함
optional func tableView(_ tableView: UITableView, commit editingStyle: UItableViewCell.EditingStyle, forRowAt indexPath: IndexPath)
// 행이 다른 위치로 이동되면 어디에서 어디로 이동했는지 알려주는 메서드
optional func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath)
참고
- https://developer.apple.com/documentation/uikit/uitableviewdelegate
- https://developer.apple.com/documentation/uikit/uitableviewdatasource
- https://woonhyeong.tistory.com/6?category=827228
반응형
'iOS > iOS' 카테고리의 다른 글
[iOS] UserDefaults를 사용한 데이터 저장 (0) | 2021.12.07 |
---|---|
[iOS] UIAlertController를 이용한 메시지 창 (0) | 2021.12.07 |
[iOS] UITableView 알아보기 - 1 (0) | 2021.12.05 |
[iOS] @IBInspectable, @IBDesignable (0) | 2021.12.05 |
[iOS] UIStackView (0) | 2021.12.05 |
댓글