iOS/UIKIT

collectionView.reloadData()는 어디에 넣을까?

밤새는 탐험가89 2024. 10. 14. 13:16

각 스택뷰를 눌렀을 때 userCollectionView의 셀 배경색을 변경하려면, reloadData()를 호출하는 부분을 제스처 메서드에서 수행하는 게 맞습니다.

하지만, 현재 cellForItemAt에서 self.backgroundColor로 배경색을 설정하고 있으므로, 변경된 배경색 정보를 저장할 방법이 필요합니다. 예를 들어, ProfileViewController에 selectedColor라는 변수를 추가하여 선택된 색상을 저장하고, reloadData()를 통해 셀 배경을 업데이트할 수 있습니다.

 

    @objc func lampStackTapped() {
        self.selectedColor = .systemRed
        print("램프 탭")
        DispatchQueue.main.async {
            self.profileView.userCollectionView.reloadData()
        }
    }

    @objc func scrapStackTapped() {
        self.selectedColor = .systemCyan
        print("스크랩 탭")
        DispatchQueue.main.async {
            self.profileView.userCollectionView.reloadData()
        }
    }

    @objc func estimateStackTapped() {
        self.selectedColor = .systemMint
        print("리뷰 탭")
        DispatchQueue.main.async {
            self.profileView.userCollectionView.reloadData()
        }
    }

 

 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if collectionView == profileView.userCollectionView {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
        
        // 선택된 색상으로 셀 배경색 설정
        cell.backgroundColor = selectedColor
        return cell
    }
    
    return UICollectionViewCell()
}

 

 

추가 팁:

reloadData()는 제스처 메서드에서 호출하는 것이 맞습니다. 이 방식이 선택된 색상을 즉시 반영할 수 있도록 해주기 때문입니다. cellForItemAt에서 직접 변경하는 대신 제스처 메서드에서 색상을 관리하는 것이 MVC 패턴에도 더 적합합니다.