위의 이미지를 보면 자연여행, 문화여행 이라는 문구가 있는 곳은 컬렉션뷰를 통해 구현했습니다.
그 밑에는 테이블뷰로 구성되어있고, 각 행은 컬렉션뷰 입니다.
각 뷰의 셀을 눌렀을 때 구분하고자 아래와 같이 코드를 작성했습니다.
// MARK: - extension CollectionView
extension HomeViewController: UICollectionViewDelegate, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
// 카테고리 부분 컬렉션 뷰
if collectionView == homeView.homeheaderView.categoryView.categoryCollectionView {
return categories.count
}
// 테이블뷰에 있는 컬렉션 뷰
switch collectionView.tag {
case 0:
return locationReceivedItems.count
case 1:
return categoryReceivedItems.count
case 2:
return popularReceivedItems.count
default:
return 0
}
}
if collectionView == homeView.homeheaderView.categoryView.categoryCollectionView를 사용해서 특정 컬렉션 뷰를 구분하고, 나머지 테이블뷰의 컬렉션뷰는 tag로 구분하는 것은 올바른 방법입니다.
이 방식은 특히 각 컬렉션 뷰가 서로 다른 데이터를 처리하고 있고, 구분할 수 있는 명확한 기준이 있을 때 매우 유용합니다. tag를 통해 테이블 뷰 내에서 각각의 컬렉션 뷰를 구분하는 것은 직관적이고, 성능에도 문제를 일으키지 않는 효율적인 방법입니다.
다만, 나중에 tag를 관리하는데 헷갈리지 않도록, 가독성을 높이기 위해 enum이나 static constant를 사용해서 tag 값을 정의하면 더 좋을 수 있습니다. 예를 들어:
// MARK: - CollectionViewTags Enum
enum CollectionViewTags: Int {
case location = 0
case category
case popular
}
// MARK: - extension CollectionView
extension HomeViewController: UICollectionViewDelegate, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
// 카테고리 부분 컬렉션 뷰
if collectionView == homeView.homeheaderView.categoryView.categoryCollectionView {
return categories.count
}
// 테이블뷰에 있는 컬렉션 뷰
guard let collectionViewTag = CollectionViewTags(rawValue: collectionView.tag) else {
return 0
}
switch collectionViewTag {
case .location:
return locationReceivedItems.count
case .category:
return categoryReceivedItems.count
case .popular:
return popularReceivedItems.count
}
}
}
이 코드에서 변경된 부분은:
- CollectionViewTags enum을 사용해 각 컬렉션 뷰의 tag 값을 의미 있게 관리.
- collectionView.tag를 직접 사용하는 대신 CollectionViewTags(rawValue: collectionView.tag)로 변환하여 처리.
- switch 구문에서 enum의 각 케이스를 사용하여 가독성을 높이고, 실수할 가능성을 줄임.
이렇게 하면 나중에 tag 값을 수정하거나 추가할 때도 코드 유지보수가 더 쉬워집니다.
'iOS > UIKIT' 카테고리의 다른 글
navigationController?.navigationBar.titleTextAttributes (1) | 2024.10.09 |
---|---|
DGChart 사용해서 Chart 만들기 (0) | 2024.10.05 |
네비게이션 바 투명하게 만들기 (0) | 2024.09.26 |
테이블 뷰의 섹션 타이틀에 폰트 설정하기 (위치) (0) | 2024.09.26 |
탭바 색상 설정 (0) | 2024.09.23 |