2017-05-16 37 views
1

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

这是怎么发生的? 在我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 
     } 
    } 
} 

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

+0

发生这种情况的原因是单元在出列后重用,使用'prepareForReuese'来清除旧值。 – sasquatch

回答

1

你缺少else部分:

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方法的任何逻辑。在这种方法中,尝试将文本颜色属性设置为零。

1

处理旧数据显示重用细胞了正确的方法是重写prepeareForReuse在您的自定义单元格

open override func prepareForReuse() { 
    super.prepareForReuse() 

    tithiLabel.textColor = UIColor.black 
    dateLabel.textColor = UIColor.black 
    englishDateLabel.textColor = UIColor.black 
} 

清除旧值(由他们分配给nil)或设置默认为所有的值是在单元重用之后可能不一定会被设置。这样,即使未将新值显式设置为单元格,也可以确保旧值不被保留。