我是 swift 和 iOS 开发的新手,但对编程完全不是新手。我正在构建一个小型秒表应用程序作为我的第一个演示项目。它是内置 iOS8 秒表应用程序的克隆版,有一些小的变化,但大部分完全相同。
我快完成应用程序了,我注意到更新 UILabel 时出现问题。它们工作完美,但当用户单击并将 TableView 拖动到计时器下方时,它们不会更新。计时器保持正常运行,但时间未更新到 UILabel。它只会在用户放开 UITableView 时再次更新。
这里是我记录的例子
有人知道为什么会这样吗?或者如何预防?在这里发帖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 中实现?或者在这种情况下它是否是正确答案?
最佳答案
添加计时器时,swift 代码应该与 Objective-C 代码非常相似,因此(来自链接的答案):
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
会变成
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
关于ios - UILabel 文本使用 NSTimer 更新,但在触摸/拖动 UITableView 时不更新(gif 示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27972525/