UITableView索引路径行为表现奇怪

时间:2017-05-26 20:38:44

标签: ios uitableview swift3 tableview indexpath

所以我在cellForRowAt方法中有一个包含约150行的表视图,我有以下代码

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

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

问题是为什么索引路径9,18,27等具有蓝色的背景颜色。

enter image description here

3 个答案:

答案 0 :(得分:2)

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

因此,如果您在第0行将-jars spark-sql-kafka-0-10_2.11-2.1.1.jar设置为蓝色

backgroundColor

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

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

答案 1 :(得分:1)

由于您没有显示tableView(_:cellForRowAt:)方法的所有代码,只是假设您正在使用方法dequeueReusableCell(withIdentifier:)将单元格出列并已注册您的类以供重用(如果您使用自定义类)。

通过这种方法,可以重复使用单元格视图。这意味着如果你不重新设置属性(例如背景颜色),它将只使用旧单元格中的那个属性。

要解决此问题,您可以在代码中轻松添加其他内容,然后将背景颜色设置为白色。

如果您继承UITableViewCell课程,则可以使用prepareForReuse()功能进行清理,例如重置背景颜色。

答案 2 :(得分:0)

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