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의 메서드 들을 사용할 수 있다.
나는 그냥 쉽게 테이블 뷰, 콜렉션 뷰 둘 다 스크롤이 되니까 스크롤 뷰 것도 사용할 수 있겠지! 라고 생각하고 있다..ㅎ