Swift RunLoop 块表视图



因此,我有一个计时器,它每 0.1 秒在我的应用程序委托中将变量递增 1。在我的表视图控制器中,我有一个单元格中显示的这个数字。在控制器中,有另一个计时器可以重新加载可见单元格。一切都很正常,除了这样一个事实,即一旦滚动浏览表视图,数字就会停止变化,直到表视图未发布。我已经读到对此的修复是:

RunLoop.current.add(tableTimer, forMode: RunLoopMode.commonModes)

tableTimer是我的单元格重新加载计时器。尽管如此,这还是有效的,但是一旦滚动视图,它就会非常滞后,并且像往常一样是 0% 的流动性。有什么解决办法吗?谢谢。

编辑:

创建计时器:

func scheduledTimerWithTimeInterval(){
    reloadTimer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.reloadTV), userInfo: nil, repeats: true)
    RunLoop.current.add(earningTimer, forMode: RunLoopMode.commonModes)
}

更新表视图:

@objc func reloadTV() {
    self.tableView.beginUpdates()
    self.tableView.reloadRows(at: self.tableView.indexPathsForVisibleRows!, with: .none)
    self.tableView.endUpdates()
}

.1 秒为单元格中的标签重新加载一次表视图是非常愚蠢的。原因有很多。解决此问题的最佳方法是遍历所有可见的索引路径,使用索引路径创建一个 cellForRowAtIndexPath,然后通过以下方式直接从那里修改单元格标题:

@objc func reloadTV() {
    for myIP in (tableView.indexPathsForVisibleRows) {
        let cell = tableView.cellForRow(at: myIP)
        cell.textLabel?.text = changingVariable
    }
}

相关内容

  • 没有找到相关文章

最新更新