我有一个包含3个单元格的表视图。在其中一个单元格中,我试图显示一个计时器,在滚动时显然会弄乱我的单元格内容。
这是我的代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! StatsuSessionTableViewCell
if indexPath.row == 0 {
// do something
return cell
} else if indexPath.row == 1 {
// do something
return cell
} else if indexPath.row == 2 {
_ = Timer.every(1.second) { (timer: Timer) in
let time = self.date.timeIntervalSince(Date())
cell.statusTitle.text = "TIME"
cell.statusDescription.text = time.timerFormat
if time < 0 {
timer.invalidate()
}
}
return cell
}
return cell
}
如果我删除计时器并只显示一些文字,我就不会有任何问题。但显然因为细胞被破坏并重新创建,这会弄乱我的内容,计时器也会出现在indexpath.row 0而不仅仅是indepxath.row 2.
这有什么解决方法吗?
答案 0 :(得分:2)
所以你的问题是你在cellForRowAt:
创建了计时器。计时器也适用于通过重用此单元格创建的单元格。所以你必须在StatsuSessionTableViewCell
中实现这个计时器逻辑。还要在单元格中实现prepareForReuse
方法,并在那里使计时器无效。这是我建议的最安全的方式。