离开collectionviewcell的奇怪的错误

我有一个由collectionView组成的calendarView 。 这是一个使用math计算导出的自定义calendarView这是第七栏标签为红色的理想情况 第七行标记星期六,这是假期,所以第七列的所有标签的字体颜色是红色的。 但是,当我滑动或导航到其他日子时,红色标签以无法追踪的随机顺序分散。 截图如下: 瞧,这两个正确的滑动就会出现这些随机的颜色

这是怎么发生的? 在我的dequeueReusableCell方法中,我将dequeueReusableCell单元格configuration为:

 cell.isHoliday = (indexPath.row + 1) % 7 == 0 ? true : false 

这是我的自定义collectionViewCell假期的逻辑。

 @IBOutlet var dateLabel: UILabel! @IBOutlet var englishDateLabel: UILabel! @IBOutlet var tithiLabel: UILabel! var isToday: Bool = false { didSet { self.contentView.backgroundColor = isToday ? Colors.Palette.LightGreen : UIColor.white } } var isHoliday: Bool = false { didSet { if isHoliday { tithiLabel.textColor = Colors.Palette.DarkRed dateLabel.textColor = Colors.Palette.DarkRed englishDateLabel.textColor = Colors.Palette.DarkRed } else { dateLabel.textColor = UIColor.black englishDateLabel.textColor = UIColor.black } } } 

当我滑动到下个月时,每个collectionview单元格顶部的红色标签数量不断增加。 为什么发生这种情况,我怎样才能阻止这种情况发生?

你缺less其他部分:

 var isHoliday: Bool = false { didSet { if isHoliday { tithiLabel.textColor = Colors.Palette.DarkRed dateLabel.textColor = Colors.Palette.DarkRed englishDateLabel.textColor = Colors.Palette.DarkRed } else { tithiLabel.textColor = UIColor.black dateLabel.textColor = UIColor.black englishDateLabel.textColor = UIColor.black } } } 

这可能是因为单元格正在被重用,而且您没有在您的自定义单元类的prepareForReuse方法中实现任何逻辑。 在这种方法尝试设置文字颜色属性为零。

处理重用单元格中显示的旧数据的正确方法是覆盖自定义单元格中的prepeareForReuse

 open override func prepareForReuse() { super.prepareForReuse() tithiLabel.textColor = UIColor.black dateLabel.textColor = UIColor.black englishDateLabel.textColor = UIColor.black } 

清除旧值(通过将它们分配给nil )或将默认值设置为在单元重用之后可能不一定设置的所有值。 这样,即使新值没有明确地设置到单元格中,您也确定旧值不会被保留。