[英]Strange bug on dequeuing collectionviewcell
我有一個由collectionView
組成的calendarView
。 它是使用數學計算得出的自定義calendarView
。 第七行標記星期六和假日,因此第七列的所有標簽的字體顏色為紅色。 但是,當我滑動或導航到其他日子時,紅色標簽以隨機順序分散,這是無法追蹤的。 屏幕截圖如下:
這是怎么發生的? 在我的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
}
}
}
隨着我滑動到下個月,每個集合視圖單元格頂部的紅色標簽數量不斷增加。 為什么會發生這種情況?如何阻止這種情況發生?
你缺少其他部分:
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方法中實現任何邏輯。 在此方法中,嘗試將文本顏色屬性設置為nil。
處理重用單元格中顯示的舊數據的正確方法是覆蓋自定義單元格中的prepeareForReuse
open override func prepareForReuse() {
super.prepareForReuse()
tithiLabel.textColor = UIColor.black
dateLabel.textColor = UIColor.black
englishDateLabel.textColor = UIColor.black
}
清除舊值(通過將它們指定為nil
)或將默認值設置為在重復使用單元格后可能不一定設置的所有值。 這樣,即使未將新值明確設置為單元格,也可以確保不保留舊值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.