위 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() }
그 결과, 아래와 같이 부작용 없이 잘 실행되는 것을 확인할 수 있었습니다.
'iOS::스위프트(swift)' 카테고리의 다른 글
[iOS swift] 리팩토링 (0) | 2021.11.09 |
---|---|
에러(UICollectionView): the item height must be less than the height of the UICollectionView minus the section insets top and bottom values, minus the content insets top and bottom values. (0) | 2021.10.23 |
[iOS][Swift]SQLite CRUD 처리하기 ! (0) | 2021.10.18 |
[iOS][Swift] objc 함수 인자로 넘기기 (0) | 2021.10.14 |
[iOS][Swift] 하나의 뷰에서 세 가지 뷰 컨트롤러 스위치하기 (1) | 2021.10.11 |
최근댓글