본문 바로가기
iOS/iOS

[iOS] UITableView 알아보기 - 2

by 원만사 2021. 12. 6.
반응형

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

댓글