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

标签 ios uitableview swift nstimer

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

我快完成应用程序了,我注意到更新 UILabel 时出现问题。它们工作完美,但当用户单击并将 TableView 拖动到计时器下方时,它们不会更新。计时器保持正常运行,但时间未更新到 UILabel。它只会在用户放开 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 中实现?或者在这种情况下它是否是正确答案?

最佳答案

添加计时器时,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/

相关文章:

ios - SwiftUI 和 @FetchRequest 对特定数据进行排序描述符(在本例中为团队)

swift - 在以编程方式实例化的 UIViewController 中测试 UITableView

iphone - IOS:清除模态视图 Controller 中的先前内容

ios - swift 让 UIButtons 将文本输入到文本框中

ios - 由于授权,WKWebview 无法加载 Assets 文件

iOS:Core Graphics 是在 OpenGL 之上实现的吗?

ios - AFNetworking base64 参数,字符被 NSJSONSerialization 转义

ios - 边界更改时无法阻止 UITableView 移动

ios - Swift:无法将类型 '[Any]' 的值转换为指定类型 'NSString'

ios - 我如何在谷歌地图 ios 中为 GMSPolyline 设置动画