DataSource 와 delegate?

Jamezz Dev·2020년 8월 25일
0

ios 프로그래밍

목록 보기
3/10
post-custom-banner

테이블 뷰 데이터 소스와 델리게이트

  • UITableView 객체는 dataSource 와 Delegate가 없다면 정상적으로 동작하기가 어렵기에 꼭 두 객체가 필요하다
  • DataSource 는 MVC 패턴중 모델과 관련되어 있다
  • Delegate는 테이블의 모양과 동작을 관리하기에 컨트롤러의 역할에 가깝다
  • table View 는 뷰에 가깝다

dataSource

  • 테이블 뷰 데이터 소스 객체는 UITableViewDataSource 프로토콜을 채택한다
  • 테이블 뷰를 생성하고 수정하는데 필요한 정보를 테이블 뷰 객체에 제공한다
  • 데이터 모델의 델리게이트로, 테이블 뷰의 시각적인 모양에 대한 최소한의 정보를 제공한다
  • UITable View 객체에 섹션수, 행의 수를 알려주며, 행의 삽입, 삭제 및 재정렬하는 기능을 선택적으로 구현할 수 있다.
  • UITableViewDataSource 프로토콜의 주요 메서드는 아래와 같으며 @required선언된 두가지 메서드는 UITableViewDataSource 프로토콜을 채택한 타입에 필수로 구현해야 한다
@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

  • 테이블 뷰 델리게이트 객체는 UITableViewDelegate 프로토콜을 채택한다

  • 테이블 뷰의 시각적인 부분 수정, 행의 선택 관리, 액세서리뷰 지원 그리고 테이블 뷰의 개별 행 편집을 도와준다

  • 테이블 뷰의 세세한 부분을 조정할 수 있다

  • 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?)
profile
💻디지털 노마드를 🚀꿈꾸는 🇯🇲자메즈 🐥개발자 입니다.
post-custom-banner

0개의 댓글