[RC]3주차 개념 - UITableView

iOSoo·2021년 9월 25일
0
post-thumbnail
post-custom-banner

<질문 1> TableView는 사용이유?
<질문 2> TableView의 구성요소?
<질문 3> TableView의 구현방법?

[사용이유]

1. 데이터의 가변성에 대응하기 위해서이다.

반대로 데이터의 수가 고정적인 상황일 때는 ScrollView를 사용한다.

2. 데이터의 수가 몇개일지 모르는 상황일 때

3. 기획자가 가변적일 때를 대응하기 위해서이다.

(버튼이 3개에서 4개로 늘어날 때) -> 따라서 앱을 만들 때 기획자에게 변경 가능성이 있는지 물어보면서 앱을 만들자.

TableView를 만든다면 ?

-> Dynamic StackView + ScrollView

앱을 만들때는 추천하는 순서

Model을 먼저 만들고 UI를 만들어라!

[구성요소]

1. UI -> Cell을 구성

func tableView(_ tableView: UITableView,
                   cellForRowAt indexPath: IndexPath) -> UITableViewCell {
}

2. cell의 갯수

func tableView(_ tableView: UITableView,
                   numberOfRowsInSection section: Int) -> Int {     
}

[UITableView관련 메서드]

UITableViewDelegate

  • 테이블뷰 델리게이트 객체는 UITableViewDelegate 프로토콜을 채택
  • 델리게이트는 테이블뷰의 시각적인 부분 수정, 행의 선택 관리, 액세서리뷰 지원 그리고 테이블뷰의 개별 행 편집을 도움
  • MVC(Model-View-Controller) 디자인 패턴 중, Controller와 관련
  • 필수로 구현해야 하는 메서드는 없음
// 지정된 행이 선택되었음을 알리는 메서드
func tableView(UITableView, didSelectRowAt: IndexPath)

// 지정된 행의 선택이 해제되었음을 알리는 메서드
func tableView(UITableView, didDeselectRowAt: IndexPath)

// 특정 위치 행의 높이를 묻는 메서드
func tableView(UITableView, heightForRowAt: IndexPath)

// 특정 위치 행의 들여쓰기 수준을 묻는 메서드
func tableView(UITableView, indentationLevelForRowAt: 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?)

UITableViewDataSource

  • 테이블뷰 데이터 소스 객체는 UITableViewDataSource 프로토콜을 채택
  • 데이터 소스는 테이블 뷰를 생성하고 수정하는데 필요한 정보를 테이블뷰 객체에 제공
  • 데이터 소스는 데이터 모델의 델리게이트로, 테이블뷰의 시각적 모양에 대한 최소한의 정보를 제공
  • MVC(Model-View-Controller) 디자인 패턴 중, Model과 관련
  • 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)

Delegate - DataSource의 관계

[구현방법]

[참고]

https://velog.io/@yongchul/iOSTableView%EA%B4%80%EB%A0%A8-method%EC%9D%98-%EA%B8%B0%EB%8A%A5%EA%B3%BC-%EC%82%AC%EC%9A%A9%EB%B2%95

profile
애플을 좋아하는 비전공생
post-custom-banner

0개의 댓글