사실 UICollectionView에 대해서 공부를 하면서, List형태로 cell들의 Layout을 변경하면 TableView를 만들면 될 것 같다는 생각이 들었다. TableView와 CollectionView의 차이점에 대해서 생각해보고 어떨 경우에 두 개체를 어떤 환경에서 사용하는게 적합한지 알아보자!
동적 프로토타입(Dynamic Prototypes)
정적 셀(Static Cells)
Cell, delegate, dataSource
테이블뷰를 이루는 개별 행(row), UITableViewCell 클래스를 상속받는다
Cell Content (셀 콘텐츠)
Accessory View (액세서리뷰)
// 특정 위치 행의 높이를 묻는 메서드
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?)
@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)
그리드와 스택, 타일, 그리고 원형 배열을 포함하여 다양한 유연성을 제공하는 인터페이스이다
Cell, Supplementary View, Decoration View, Layout Object 로 구성되어 있다
Cell : 컬렉션뷰의 주요 콘텐츠를 표시한다. 컬렉션뷰는 컬렉션뷰 데이터 소스 객체에서 표시할 셀에 대한 정보를 가져온다. 각 셀은 UICollectionViewCell 클래스의 인스턴스 또는 UICollectionViewCell 을 상속받은 클래스의 인스턴스이다
Supplementary View : 섹션에 대한 정보를 표시한다. 셀과 달리 보충 뷰는 필수는 아니며, 사용법과 배치 방식은 사용되는 레이아웃 객체가 제어합니다. 헤더와 푸터를 예로 들 수 있다
Layout Object: 레이아웃 객체는 컬렉션뷰 내의 아이템 배치 및 시각적 스타일을 결정합니다. 컬렉션뷰 데이터 소스 객체가 뷰와 표시할 콘텐츠를 제공한다면, 레이아웃 객체는 크기, 위치 및 해당 뷰의 레이아웃과 관련된 특성들을 결정한다
UICollectionView
UICollectionViewController
UICollectionViewDataSource protocol
UICollectionViewDelegate protocol
UICollectionReusableView / UICollectionViewCell
UICollectionViewLayout
UICollectionViewLayoutAttribute
UICollectionViewUpdateItem
UICollectionView : 사용자에게 보여질 컬렉션 형태의 뷰
UICollectionViewCell : UICollectionView 인스턴스에 제공되는 데이터를 화면에 표시하는 역할을 담당
UICollectionReusableView : 뷰 재사용 메커니즘을 지원한다
UICollectionViewFlowLayout : 컬렉션뷰를 위한 디폴트 클래스로, 그리드 스타일로 셀들을 배치하도록 설계되어 있다. scrollDirection 프로퍼티를 통해 수평 및 수직 스크롤을 지원한다
UICollectionViewLayoutAttributes : 컬렉션뷰 내의 지정된 아이템의 레이아웃 관련 속성을 관리한다
UICollectionViewDataSource : 컬렉션뷰에 필요한 데이터 및 뷰를 제공하기 위한 기능을 정의한 프로토콜이다
UICollectionViewDelegate : 컬렉션뷰에서 아이템의 선택 및 강조 표시를 관리하고 해당 아이템에 대한 작업을 수행할 수 있는 기능을 정의한 프로포톨입니다
UICollectionViewDelegateFlowLayout 프로토콜 : UICollectionViewLayout 객체와 함께 그리드 기반 레이아웃을 구현하기 위해 정의한 프로토콜이다
CollectionView DataSource 객체는 CollectionView에 있어서 가장 중요한 객체이며, 필수로 제공되어야 합니다. 컬렉션뷰의 콘텐츠를 관리하고 해당 컨텐츠를 표현하는데 필요한 뷰를 만듭니다. 데이터소스 객체를 구현하려면 UICollectionViewDataSource 프로토콜을 준수하는 객체를 만들어야 합니다. 그리고 데이터소스 객체는 최소한 collectionView(_: numberOfItemsInSection:)
과 collectionView(_:cellForItemAt:)
메서드를 구현해야 하며 나머지 메서드는 선택사항이다
List in UICollectionView
raywenderlich UICollectionView-custom-layout
raywenderlich UICollectionView List
케인, 잘 보고 갑니답!