的UITableView索引路径行为举止怪异

问题描述:

所以我有大约150ish排在cellForRowAt方法,我有以下代码的UITableView索引路径行为举止怪异

cell.monthLabel.text = String(indexPath.row) 

if indexPath.row == 0{ 
    cell.backgroundColor = .blue 
} 

表视图的问题是,为什么在指数路径9,18,27等有蓝色的背景颜色。

enter image description here

单元格被重用,您必须将所有UI元素设置为已定义的状态。

所以,如果你设置了backgroundColor蓝色行0

if indexPath.row == 0 { 
    cell.backgroundColor = .blue 
} 

你必须(重新)将其设置为默认的颜色在其他情况下

else { 
    cell.backgroundColor = .white 
} 
+1

谢谢你解决了我的问题,但出于好奇你会碰巧知道为什么它是每9个细胞,而不是每个细胞是蓝色的? –

+3

您在屏幕上添加了7个单元格,并在用户滚动时添加了2个 - 一个位于顶部,另一个位于底部。 – vadian

当你不显示tableView(_:cellForRowAt:)方法的所有代码只是假设你离队细胞(该方法dequeueReusableCell(withIdentifier:)和已经注册你的类的重用(如果你使用自定义类)。

使用这种方法可以重用单元格的视图,这意味着如果您不重新设置属性(例如背景颜色),它将只使用旧单元格的一种形式。在你的代码中包含一个else,并在那里设置背景颜色变白。

如果您继承了UITableViewCell类,那么您可以使用prepareForReuse()函数进行清理,例如,重置背景颜色。

+0

很好的解释 – Maddy

的UITableView不设置每个项目上的数据一次,它会根据活动继续在所有可见项目上一次又一次地设置数据。我不能给你这种行为的明确理由,但我可以给你解决方案。无论何时您在某些条件下设置某些项目的数据时,请始终使用“Else”语句。所以对于这个特殊的问题,你只需要在你的“If”条件下添加“Else”块并在“Else”块中设置项目的白色背景。