UILabel使用NSTimer进行文本更新,但不能在触摸/拖动UITableView时进行更新(gif示例)

时间:2015-01-15 20:37:20

标签: ios uitableview swift nstimer

我是swift和iOS开发的新手,但根本不是编程新手。我正在构建一个小型秒表应用程序作为我的第一个演示项目。它是内置iOS8秒表应用程序的一个克隆,有一些小的变化,但大多数完全相同。

我差不多完成了应用程序,我注意到UILabels正在更新的问题。它们工作得很好,但是当用户点击并拖动计时器下方的表格视图时,它们不会更新。计时器保持正常运行,但时间没有更新到UILabels。当用户放开UITableView时,它只会再次更新。

以下是我录制的示例

Time label stops updating while user touch/drags the tableview

有谁知道为什么会这样?或者如何预防呢?在这里的帖子NSTimer gets disturbed while scrolling the UITableView in iphone中,似乎问题是NSTimer正在主线程上运行,这是所有UI渲染发生的地方。

我想我应该在另一个线程上运行NSTimer。或者也许是另一个线程上的UITableView。我如何在Swift中将它们作为单独的线程运行?这篇文章NSTimer not working while dragging a UITableView似乎很好地解释了Objective-C。它实际上解释了并非NSTimer需要在另一个线程上运行,而是需要将其配置为在所有常见模式下运行。有谁知道如何在Swift中实现这一点?或者,如果在这种情况下它是正确的答案?

1 个答案:

答案 0 :(得分:4)

在添加计时器时,swift代码应该与Objective-C代码非常相似,所以(来自链接的答案):

[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

会变成

NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
相关问题