的UITableView索引路径行为举止怪异
所以我有大约150ish排在cellForRowAt
方法,我有以下代码的UITableView索引路径行为举止怪异
cell.monthLabel.text = String(indexPath.row)
if indexPath.row == 0{
cell.backgroundColor = .blue
}
表视图的问题是,为什么在指数路径9,18,27等有蓝色的背景颜色。
单元格被重用,您必须将所有UI元素设置为已定义的状态。
所以,如果你设置了backgroundColor
蓝色行0
if indexPath.row == 0 {
cell.backgroundColor = .blue
}
你必须(重新)将其设置为默认的颜色在其他情况下
else {
cell.backgroundColor = .white
}
当你不显示tableView(_:cellForRowAt:)
方法的所有代码只是假设你离队细胞(该方法dequeueReusableCell(withIdentifier:)
和已经注册你的类的重用(如果你使用自定义类)。
使用这种方法可以重用单元格的视图,这意味着如果您不重新设置属性(例如背景颜色),它将只使用旧单元格的一种形式。在你的代码中包含一个else,并在那里设置背景颜色变白。
如果您继承了UITableViewCell
类,那么您可以使用prepareForReuse()
函数进行清理,例如,重置背景颜色。
很好的解释 – Maddy
的UITableView不设置每个项目上的数据一次,它会根据活动继续在所有可见项目上一次又一次地设置数据。我不能给你这种行为的明确理由,但我可以给你解决方案。无论何时您在某些条件下设置某些项目的数据时,请始终使用“Else”语句。所以对于这个特殊的问题,你只需要在你的“If”条件下添加“Else”块并在“Else”块中设置项目的白色背景。
谢谢你解决了我的问题,但出于好奇你会碰巧知道为什么它是每9个细胞,而不是每个细胞是蓝色的? –
您在屏幕上添加了7个单元格,并在用户滚动时添加了2个 - 一个位于顶部,另一个位于底部。 – vadian