首页 文章

出列collectionviewcell的奇怪错误

提问于
浏览
1

我有 calendarViewcollectionView 组成 . 它是使用数学计算得出的自定义 calendarView .
This is ideal situation where labels in seventh column is red
第七行标记星期六和假日,因此第七列的所有标签的字体颜色为红色 . 但是,当我滑动或导航到其他日子时,红色标签以随机顺序分散,这是无法追踪的 . 屏幕截图如下:
And voila, here come those random colors on two right swipes

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

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
        }
    }
}

随着我滑动到下个月,每个集合视图单元格顶部的红色标签数量不断增加 . 为什么会发生这种情况?如何阻止这种情况发生?

3 回答

  • 1

    你错过了其他部分:

    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
            }
        }
    }
    
  • 1

    这可能是因为单元正在被重用,并且您没有在自定义单元类的prepareForReuse方法中实现任何逻辑 . 在此方法中,尝试将文本颜色属性设置为nil .

  • 1

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

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

    清除旧值(通过将它们分配给 nil )或将默认值设置为在重复使用单元格后可能不一定要设置的所有值 . 这样,即使未将新值明确设置为单元格,也可以确保不保留旧值 .

相关问题