이전 포스팅
자세한 코드는 여기로!
8/18
저번에 CollectionView의 Delegate와 Datasource의 설정 + Inherit Module From Target 체크 에 대해 더 자세히 알아보자
1️⃣ CollectionView의 Datasource
- 모든 CollectionView는 Datasource 객체를 가지고 있다.
- 요 Datasource는 앱이 보여주는 컨텐츠 그 자체!
- Datasource를 정의하려면 UICollectionViewDataSource프로토콜을 채택해줘야 한다.
extension TodoListViewController: UICollectionViewDataSource {}
- 이 프로토콜을 채택할 때는 필수적으로 두가지 메소드를 정의해야한다.
// collectionView(_:numberOfItemsInSection:) : 지정된 섹션에 표시할 항목의 개수를 묻는 메서드
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
// collectionView(_:cellForItemAt:) : 컬렉션뷰의 지정된 위치에 표시할 셀을 요청하는 메서드
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
- 선택적 메소드
// numberOfSections(in:) : 컬렉션뷰의 섹션의 개수를 묻는 메서드 > 이 메서드를 구현하지 않으면 섹션 개수 기본 값은 1
optional func numberOfSections(in collectionView: UICollectionView) -> Int
➰ CollectionView가 처음 데이터를 로드할 때, Datasource에게 보일 데이터의 정보를 물어보게 된다.
- CollectionView는 뷰를 재사용
- dequeResuableCell(withReuseIdentifier:for:) : item 에 대한 Cell을 얻는 메소드
➕ CollectionView는 Cell 뿐만 아니라, 다른 타입의 View도 제공! 바로 Supplementary View
- Todo List에서는 Section Header가 이에 해당 (Section Footer 도 있음)
- Cell 과 달리 옵셔널
- dequeueReusableSuppementaryView(ofKind:withReuseIdentifier:for:) : supplementary view를 얻기 위한 메소드
2️⃣ CollectionView의 Delegate
- CollectionView 객체는 Delegate 객체를 가지고 선택된 아이템들도 관리할 수 있다.
- 이 프로토콜의 메소드는 모두 선택사항
➰ Cell의 layout에 대한 delegate
- UICollectionViewDelegateFlowLayout프로토콜을 채택
extension TodoListViewController: UICollectionViewDelegateFlowLayout {}
3️⃣ Storyboard에서 Datasource와 Delegate
근데,, 여기까지 했는데 화면에 Cell들을 포함한 CollectionView가 뜨지 않았었다.
확인해보니 CollectionView의 Section Header의 Custom Class의 Module 연결이 되어있지 않아서 였는데, Inherit Module From Target의 체크박스에 표시하면 해결~
야하... ~
이거 정리하고 나니까 왤케 졸리지 지금 시간 새벽 1시..
내일 아침 7시반 알바인데 ,, 이러다가 3-4시간 자고 알바가는 대참사가 일어날..
정신차려..
자, 이어서 계속 해보자!
일단 지금까지 진행한 코드로 실행시켜보니,
요로코롬 못생김
해결방법은
Collection View Flow Layout의 Estimate Size를 Automatic에서 None으로 바꿔주니
예쁘게 잘뜸!
🚫 Swift5 혹은 Xcode11 이후부터 UICollectionViewDelegateFlowLayout의 size 결정 메서드가 제대로 동작하기 위해서는 CollectionView Estimate Size 속성을 None으로 바꿔야한다고 함!
Todo 체크 버튼이랑 Todo Delete 버튼 구현은 내일!
'iOS > Toy project' 카테고리의 다른 글
[iOS : Toy Project] Apple Music App (1) : 뷰 구성 (0) | 2022.09.06 |
---|---|
[iOS : Toy Project] Todo List 만들기 (5) (0) | 2022.08.19 |
[iOS : Toy Project] Todo List 만들기 (3) (0) | 2022.08.17 |
[iOS : Toy Project] Todo List 만들기 (2) (0) | 2022.08.16 |
[iOS : Toy Project] Todo List 만들기 (1) (0) | 2022.08.15 |