1

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

cell.monthLabel.text = String(indexPath.row)
    
if indexPath.row == 0{
    cell.backgroundColor = .blue
}

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

在此处输入图像描述

4

3 回答 3

2

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

因此,如果您backgroundColor在第 0 行将 设置为蓝色

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

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

else {
    cell.backgroundColor = .white
}
于 2017-05-26T21:00:21.457 回答
1

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

通过这种方法,单元格的视图被重用。这意味着如果您不重新设置属性(例如背景颜色),它将只使用旧单元格的一种形式。

要解决此问题,您可以轻松地在代码中包含 else 并将背景颜色设置为白色。

如果您将该类子UITableViewCell类化,您可以使用该prepareForReuse()功能进行清理,例如重置背景颜色。

于 2017-05-26T20:49:48.830 回答
0

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

于 2017-05-26T21:08:46.123 回答