티스토리 뷰
UITableView
테이블뷰는 iOS 애플리케이션에서 많이 활용하는 사용자 인터페이스입니다.
테이블뷰는 리스트 형태를 지니고 있으며 스크롤이 가능해 많은 정보를 보여 줄 수 있습니다.
테이블 뷰 기본 형태
UITableView 에는 3대 요소가 있습니다. 차근차근 하나씩 알아보겠습니다.
UITableViewCell
구조
기본적으로 테이블뷰 셀은 크게 콘텐츠 영역과 액세서리뷰 영역으로 구조가 나뉩니다.
- 콘텐츠 영역: 셀의 왼쪽 부분에는 주로 문자열, 이미지 혹은 고유 식별자 등이 입력됩니다.
- 액세서리뷰 영역: 셀의 오른쪽 작은 부분은 액세서리뷰로 상세보기, 재정렬, 스위치 등과 같은 컨트롤 객체가 위치합니다.
테이블뷰를 편집 모드(Editing Mode)로 전환하면 아래와 같은 구조로 바뀝니다.
- 편집 컨트롤은 삭제 컨트롤(빨간 원 안의 마이너스 기호) 또는 추가 컨트롤(녹색 원 안의 플러스 기호) 중 하나가 될 수 있습니다.
- 재정렬이 가능한 경우, 재정렬 컨트롤이 액세서리뷰에 나타납니다. 재정렬 컨트롤을 눌러 셀을 드래그하면 위아래로 순서를 변경할 수 있습니다.
기본 기능
UITableViewCell 클래스는 셀 콘텐츠에 다음의 기본 프로퍼티가 정의되어 있습니다.
- textLabel: UILabel: 주제목 레이블
- detailTextLabel: UILabel: 부제목 레이블
- imageView: UIImageView: 이미지 표시
- accessoryView: UIView? : 주로 컨트롤로 사용되며, 디폴트로 오른쪽에 위치함
UITableViewDastaSource, UITableViewDelegate
UITableView는 위의 두가지 핵심 프로토콜을 제공하는데, 관련 내용은 DelegatePattern 톺아보기 에서 설명하고 있습니다.
UITableViewDataSource
-
테이블 뷰를 생성하고 수정하는데 필요한 정보를 테이블뷰 객체에 제공합니다.
-
데이터 모델의 델리게이트로, 테이블뷰의 시각적 모양에 대한 최소한의 정보를 제공합니다.
-
UITableView 객체에 섹션의 수와 행의 수를 알려주며, 행의 삽입, 삭제 및 재정렬하는 기능을 선택적으로 구현할 수 있습니다.
@required
// 특정 위치에 표시할 셀을 요청하는 메서드
func tableView(UITableView, cellForRowAt: IndexPath)
// 각 섹션에 표시할 행의 개수를 묻는 메서드
func tableView(UITableView, numberOfRowsInSection: Int)
@optional
// 테이블뷰의 총 섹션 개수를 묻는 메서드
func numberOfSections(in: UITableView)
// 특정 섹션의 헤더 혹은 푸터 타이틀을 묻는 메서드
func tableView(UITableView, titleForHeaderInSection: Int)
func tableView(UITableView, titleForFooterInSection: Int)
// 특정 위치의 행을 삭제 또는 추가 요청하는 메서드
func tableView(UITableView, commit: UITableViewCellEditingStyle, forRowAt: IndexPath)
// 특정 위치의 행이 편집 가능한지 묻는 메서드
func tableView(UITableView, canEditRowAt: IndexPath)
// 특정 위치의 행을 재정렬 할 수 있는지 묻는 메서드
func tableView(UITableView, canMoveRowAt: IndexPath)
// 특정 위치의 행을 다른 위치로 옮기는 메서드
func tableView(UITableView, moveRowAt: IndexPath, to: IndexPath)
UITableViewDelegate
-
델리게이트는 테이블뷰의 시각적인 부분 수정, 행의 선택 관리, 액세서리뷰 지원 그리고 테이블뷰의 개별 행 편집을 도와줍니다.
-
델리게이트 메서드를 활용하면 테이블뷰의 세세한 부분을 조정할 수있습니다.
// 특정 위치 행의 높이를 묻는 메서드
func tableView(UITableView, heightForRowAt: IndexPath)
// 특정 위치 행의 들여쓰기 수준을 묻는 메서드
func tableView(UITableView, indentationLevelForRowAt: IndexPath)
// 지정된 행이 선택되었음을 알리는 메서드
func tableView(UITableView, didSelectRowAt: IndexPath)
// 지정된 행의 선택이 해제되었음을 알리는 메서드
func tableView(UITableView, didDeselectRowAt: IndexPath)
// 특정 섹션의 헤더뷰 또는 푸터뷰를 요청하는 메서드
func tableView(UITableView, viewForHeaderInSection: Int)
func tableView(UITableView, viewForFooterInSection: Int)
// 특정 섹션의 헤더뷰 또는 푸터뷰의 높이를 물어보는 메서드
func tableView(UITableView, heightForHeaderInSection: Int)
func tableView(UITableView, heightForFooterInSection: Int)
// 테이블뷰가 편집모드에 들어갔음을 알리는 메서드
func tableView(UITableView, willBeginEditingRowAt: IndexPath)
// 테이블뷰가 편집모드에서 빠져나왔음을 알리는 메서드
func tableView(UITableView, didEndEditingRowAt: IndexPath?)
'iOS' 카테고리의 다른 글
[iOS] UITableView 톺아보기 - 3 (0) | 2019.08.01 |
---|---|
[iOS] UITableView 톺아보기 - 2 (0) | 2019.08.01 |
[iOS] Gesture Recognizer 톺아보기 (0) | 2019.07.31 |
[iOS] 타겟-액션 (tartget-action) 패턴 톺아보기 (0) | 2019.07.31 |
[iOS] Swift 싱글턴 톺아보기 (0) | 2019.07.31 |
댓글
공지사항