在 UITableView 中滚动时第一个和最后一个单元格更改颜色
First and Last Cell Change Color When Scrolling in UITableView
我有一个具有特定颜色的自定义单元格列表,具体颜色取决于时间。计时器运行以保持每个单元格的颜色是最新的。每次我一直滚动到 tableView 的顶部或底部时,tableView 中的第一个和最后一个单元格都有彼此的颜色。例如,如果第一个单元格是绿色而最后一个单元格是红色,那么当我向上滚动时第一个单元格变为红色,一秒钟后变为绿色。这是我的计时器:
// Refreshes the labels every second to update the time
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { [weak self] _ in
if let s = self, let tableView = s.tableView, let indexPaths = tableView.indexPathsForVisibleRows {
for indexPath in indexPaths {
guard let cell = tableView.cellForRow(at: indexPath) as? PersonCell else { return }
let person = s.people[indexPath.section]
let day = dayOfWeekIn(timeZone: person.timeZone)
// update text of cell and check some conditions to set the gradient of the cell accordingly
}
})
我也在cellForRowAt中配置了我的单元格,但是这些配置与单元格的背景无关,所以我认为这不是问题的原因。如果有人能帮我解决这个问题,我将不胜感激。
细胞被重复使用...
这意味着,当您向下滚动然后向上滚动时,您可以看到一个单元格的背景颜色更改为红色,而它位于第 20 行,但现在用于第 0 行。
您需要在 cellForRowAt
每次 中明确设置所需的背景颜色。
编辑
您可以使用当前的方法更改背景颜色,但您必须将当前背景颜色作为数据源的一部分进行跟踪。
例如,将 currentBackgroundColor
属性 添加到您的 Person
class。当您这样做时:
// update text of cell and check some conditions to set the gradient of the cell accordingly
你也会做(类似的事情):
data[indexPath.section].currentBackgroundColor = UIColor.green
当你接到 cellForRowAt
的电话时,你会 也 做:
cell.backgroundColor = data[indexPath.section].currentBackgroundColor
在没有看到您的实际数据源/结构的情况下,很难给您一个明确的示例,但就是这样。
我有一个具有特定颜色的自定义单元格列表,具体颜色取决于时间。计时器运行以保持每个单元格的颜色是最新的。每次我一直滚动到 tableView 的顶部或底部时,tableView 中的第一个和最后一个单元格都有彼此的颜色。例如,如果第一个单元格是绿色而最后一个单元格是红色,那么当我向上滚动时第一个单元格变为红色,一秒钟后变为绿色。这是我的计时器:
// Refreshes the labels every second to update the time
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { [weak self] _ in
if let s = self, let tableView = s.tableView, let indexPaths = tableView.indexPathsForVisibleRows {
for indexPath in indexPaths {
guard let cell = tableView.cellForRow(at: indexPath) as? PersonCell else { return }
let person = s.people[indexPath.section]
let day = dayOfWeekIn(timeZone: person.timeZone)
// update text of cell and check some conditions to set the gradient of the cell accordingly
}
})
我也在cellForRowAt中配置了我的单元格,但是这些配置与单元格的背景无关,所以我认为这不是问题的原因。如果有人能帮我解决这个问题,我将不胜感激。
细胞被重复使用...
这意味着,当您向下滚动然后向上滚动时,您可以看到一个单元格的背景颜色更改为红色,而它位于第 20 行,但现在用于第 0 行。
您需要在 cellForRowAt
每次 中明确设置所需的背景颜色。
编辑
您可以使用当前的方法更改背景颜色,但您必须将当前背景颜色作为数据源的一部分进行跟踪。
例如,将 currentBackgroundColor
属性 添加到您的 Person
class。当您这样做时:
// update text of cell and check some conditions to set the gradient of the cell accordingly
你也会做(类似的事情):
data[indexPath.section].currentBackgroundColor = UIColor.green
当你接到 cellForRowAt
的电话时,你会 也 做:
cell.backgroundColor = data[indexPath.section].currentBackgroundColor
在没有看到您的实际数据源/结构的情况下,很难给您一个明确的示例,但就是这样。