iOS

[iOS] 테이블 뷰와 컬렉션 뷰의 Delegate

snowe 2020. 11. 29. 16:00

UICollectionViewDelegateFlowLayout 공부할 겸..

먼저 글을 읽기 전에 Delegate Pattern에 대해 정리한 글을 읽고 와주시면 더 이해가 빠를것 같습니다!

 

01. UITableViewDelegate

  • 테이블뷰 델리게이트 객체는 UITableViewDelegate 프로토콜을 채택한다.
  • 테이블뷰 델리게이트는 테이블뷰의 모양과 동작을 관리하기에 MVC(Model-View-Controller) 디자인 패턴 중, Controller와 관련이 있다.
  • 델리게이트는 테이블뷰의 시각적인 부분 수정, 행의 선택 관리, 액세서리뷰 지원 그리고 테이블뷰의 개별 행 편집을 도와준다.(링크 참고)
    시각적인 부분이 포인트!
  • UITableViewDelegate 프로토콜의 주요 메서드는 여기를 참고하면 된다.(이 중 필수로 구현해야 하는 메서드는 없다.)

01–1. UITableViewDelegate Methods

공식 문서에 정리되어 있는 메서드들의 역할을 크게 분류하면 다음과 같다.
  • Configuring Rows for the Table View
  • Responding to Row Selections
  • Providing Custom Header and Footer Views
  • Providing Header, Footer, and Row Heights
  • Estimating Heights for the Table’s Content
  • Managing Accessory Views
  • Managing Context Menus
  • Responding to Row Actions
 

02. UICollectionViewDelegate

  • 콜렉션 뷰 델리게이트 객체는 UICollectionViewDelegate 프로토콜을 채택한다.
  • 이 프로토콜의 모든 메서드는 옵셔널이다.
  • 콜렉션 뷰 안의 item과 user간의 상호작용을 관리한다
    위에서 알아본 UITableViewDelegate경우와 마찬가지로 시각적인 부분을 담당

02–1. UICollectionViewDelegate Methods

공식 문서에 정리되어 있는 메서드들의 역할을 크게 분류하면 다음과 같다.
  • Managing the Selected Cells
  • Managing Cell Highlighting
  • Tracking the Addition and Removal of Views
  • Handling Layout Changes
  • Managing Context Menus
  • Managing Focus in a Collection View
  • Editing Items
  • Controlling the Spring-Loading Behavior

03. UICollectionViewDelegateFlowLayout

아니 이건 뭐야? 컬렉션 뷰는 왜 두개나 있지? 라고 생각할 수 있다. 나도 그랬고..ㅎㅎ
UICollectionViewDelegateFlowLayout는 그리드 기반의 레이아웃을 구현할 때 사용하는 프로토콜이다. 하지만 꼭 그리드 형식이어야 하는 것은 아니 CollectionViewCell의 사이즈를 AutoLayout에 의존하지 않고 동적으로 구현하기 위해 주로 사용한다.

  • UICollectionViewDelegate를 상속받은 프로토콜이기 때문에 따로 delegate 프로토콜을 채택하지 않아도 delegate 메소드 사용이 가능하다.
  • 이 프로토콜은 그리드 안의 아이템들 간의 간격과 사이즈들을 정의해준다.
  • 이 프로토콜의 모든 메서드는 옵셔널이다.

메서드의 주요 카테고리는 다음과 같다.

  • Getting the Size of Items
  • Getting the Section Spacing
  • Getting the Header and Footer Sizes
 

04. 한 가지 알아두면 좋은 사실

UITableViewDelegate와 UICollectionViewDelegate는 UIScrollViewDelegate의 상속을 받은 친구들이기 때문에 UIScrollViewDelegate의 메서드 들을 사용할 수 있다.

나는 그냥 쉽게 테이블 뷰, 콜렉션 뷰 둘 다 스크롤이 되니까 스크롤 뷰 것도 사용할 수 있겠지! 라고 생각하고 있다..ㅎ