滚动时UITableViewCell内容会发生变化,因为在其中一个单元格中运行计时器

时间:2018-04-08 08:01:44

标签: ios swift uitableview

我有一个包含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.

这有什么解决方法吗?

1 个答案:

答案 0 :(得分:2)

所以你的问题是你在cellForRowAt:创建了计时器。计时器也适用于通过重用此单元格创建的单元格。所以你必须在StatsuSessionTableViewCell中实现这个计时器逻辑。还要在单元格中实现prepareForReuse方法,并在那里使计时器无效。这是我建议的最安全的方式。