위 gif에서 보시는 것처럼 Category Collection View의 Cell 이 reuse 될 때마다 기존에 select 해뒀던 카테고리가 해제되고 엉뚱한 셀이 선택되는 것을 알 수 있습니다. 

여기에 대해 해결법을 한참 찾은 결과 cell이 dequeue될 때 해당 셀이 이미 선택되어 있으면 다시 선택 이벤트를 호출한다 로 결론이 났습니다. 

예를 들어 위의 collectionViewCell의 isSelected가 아래와 같이 돼 있다면 우리가 맞이한 문제는 dequeReusableCell 이 호출될 때마다 기존에 select된 건 해제되고, 기대하지 않은 값이 select 처리 된다는 것입니다.

    override var isSelected: Bool {
        didSet {
            
            if isSelected {
                print("selected in")
                self.categoryLabel.font = UIFont.systemFont(ofSize: 16.0, weight: .bold)
                self.categoryLabel.textColor = Config.shared.applicationFontDefaultColor
                if let title = self.categoryLabel.text {
                    NotificationCenter.default.post(name: Notification.Name("changeTitle"),
                                                    object: nil,
                                                    userInfo: ["title": title])
                } else {
                    print("can't get categoryLabel's title")
                }
            }
            else {
                print("else in")
                self.categoryLabel.font = UIFont.systemFont(ofSize: 16.0, weight: .regular)
                self.categoryLabel.textColor = Config.shared.applicationFontLightColor
            }
        }
    }

 

 

그래서 여기에 대한 해결책으로 아래 코드를 도입하였습니다.

func collectionView cellForItemAt에요!

        if cell.isSelected == true { cell.onSelected() }
        else { cell.onDeselected() }

 

 

그 결과, 아래와 같이 부작용 없이 잘 실행되는 것을 확인할 수 있었습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom