使用计时器更新UITableViewCell而不阻塞UI

时间:2019-01-24 22:32:28

标签: ios swift uitableview

我正在尝试创建一个UITableView,其中包含一堆从值开始倒数的单元格。最初,我只是在ViewController上重复运行NSTimer来运行一个函数,该函数将更新标签,然后在表上运行reloadData,这在技术上确实有效,但是存在一些问题。

要多填一些内容,我很清楚NSTimer作为计时器是不准确的,因此我在标签上的时间使用了日期计算。我还考虑过使用CADisplayLink,以便刷新将与屏幕同步,但是这在滚动表时遇到了问题,使其变得非常跳跃。另一个问题是在表上发出“编辑”命令时,由于刷新,UI无法删除行。

因此,我之后考虑将Timer移到每个UITableViewCell中,并且可以通过控制台知道它正在运行,但是该表不会更新。鉴于它无法在表上运行reloadData,这是有道理的,但是我对下一步的定位有些困惑。

我找到了similar thread here,甚至尝试了AsyncTimer suggested here,但是我做错了什么,或者这些不是完全相同的问题吗?感谢您的任何帮助,谢谢!

var timer = Timer()

self.timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.checkTimers), userInfo: nil, repeats: true)

@objc func checkTimers() {
    for counter in counters {
        if counter.isActive {
            counter.updateSeconds()
        }
    }
    tableView.reloadData()
}

0 个答案:

没有答案