【发布时间】:2019-08-21 10:29:42
【问题描述】:
我有一个动态表格视图。 它提供整整一个月的特定信息。 每天都有自己的细胞。 目标是设置与今天相同日期的单元格的背景颜色。
首先。我在cellForRow indexPath 中设置了每个单元格的标签:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MonthlyCell", for: indexPath)
guard let monthlyCell = cell as? MonthlyTableViewCell else {
fatalError("Designated cell couldn't found")
}
monthlyCell.tag = indexPath.row
return monthlyCell
}
我还有一个扩展名。这让我今天成为Int:
extension Date {
static var nowDayAsInt: Int {
let calendar = Calendar.current
let component = calendar.dateComponents([.day], from: Date())
return component.day!
}
}
最后,我在自己的类中更新了自定义单元格的背景:
class MonthlyTableViewCell: UITableViewCell {
if Date.nowDayAsInt == (self.tag + 1) {
self.setDiagonalGradientBackground()
self.makeRoundedCorners()
}
}
self.setDiagonalGradientBackground() & self.makeRoundedCorners() 也来自UIView 扩展,我认为名称是不言自明的。
结果:它总是设置两个或多个单元格背景颜色:
截图: https://imgur.com/a/FfzUgZO
我该如何解决这个问题?提前致谢
【问题讨论】:
-
是滚动后的截图,单元格被重复使用了吗?添加
else{self.setDefaultBackground()} -
是的。每当您向下滚动或更改屏幕并返回时,它都会重复
-
然后只需添加
else语句即可设置默认背景颜色。在您设置渐变背景的“if Date.nowDayAsInt...”之后。 -
感谢@Don 解决了问题
-
你可以在prepareForReuse中重新设置,这是因为reut sed时单元格没有更改为默认值
标签: ios swift iphone uitableview date