iOS/Swift

[IOS] UICollectionView 기본 사용

유훈 | Yuhun 2022. 2. 7. 21:24
반응형

collectionView의 사용은 tableView와 비슷합니다.

cell의 틀을 만들어두고 이를 가져와 사용합니다.

 

cell은 xib또는 스토리보드에서 만들어 사용합니다.

 

일단 extension을 사용하기 위해 위임을 해주어야합니다. 이 작업을 하지 않으면 작동이 안됩니다.

// viewDidLoad에 작성
self.collectionView.collectionViewLayout = UICollectionViewFlowLayout()
self.collectionView.delegate = self
self.collectionView.dataSource = self

 

이제 extension으로 다음을 추가하고 원하는 대로 커스텀 하시면 됩니다.

(extension이 아니라 그냥 protocol을 채택해도 가능하지만 가독성이 떨어집니다,)

extension StarViewController: UICollectionViewDataSource {
    
    // 필수
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return "cell 숫자"
    }
    
    // 필수
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    	// 재사용할 cell 가져오기
        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell에 설정한 identifier", for: indexPath) as? "재사용call class" else {return UICollectionViewCell()}

		// cell 정보 커스텀 하기
        
        return cell
    }
    
    
}

extension StarViewController: UICollectionViewDelegate {
    // cell선택시 실행될 method
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    	// 다른 ViewController Push 예시
        guard let viewController = self.storyboard?.instantiateViewController(withIdentifier: "스토리보드 identifier 지정") as? "viewController Class" else {return}
        self.navigationController?.pushViewController(viewController, animated: true)
    }
}

// flow latouy
extension StarViewController: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
   		// 예시: cell의 크기 스크린의 넓이와 높이 100
        return CGSize(width: UIScreen.main.bounds.width, height: 100)
    }
}

 

inSet 설정(웹에서 margin 같은 개념)

// 10씩 margin을 주는 느낌
self.collectionView.contentInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
반응형