滚动UITableView将停止计时器

时间:2012-08-27 15:33:18

标签: iphone objective-c ios xcode

我是初学者,我正在尝试为iOS编写和应用程序,它将在主屏幕中向用户显示从25分钟到0的计时器(由UILabel组成的每个文本都会更新第二个使用NSTimer)和UITableView(嵌入在主屏幕的UIViewController中),每次定时器达到0时都会显示一个单元格。

所以在我UIViewController控制的主视图中,我有: - UILabel:用于计时器 - UITableView:每次定时器达到0时显示一个单元格 - UIButton:启动计时器

除非用户将手指放在tablewView上,滚动UITableView将阻止计时器更新标签这一事实似乎一切正常。任何人都可以告诉我为什么标签在滚动UITableView时不会改变其文字?

P.S。我认为这个问题可能与我没有使用线程的事实有关,因为我还没有学会使用它们。

5 个答案:

答案 0 :(得分:5)

我做了一个快速的Google搜索,第一个结果就是:

UILabel updating stops during scrolling UIScrollView

似乎完全符合您的需求 - 因为它是完全相同的问题;)

答案 1 :(得分:5)

updateTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateCurrentTime) userInfo:p repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:updateTimer forMode:NSRunLoopCommonModes];

答案 2 :(得分:5)

Swift 3.x中的解决方案:

self.updateTimer = Timer.scheduledTimer(timeInterval:1.0, target: self, selector: "updateFunction", userInfo: nil, repeats: true)
RunLoop.current.add(self.updateTimer, forMode: RunLoopMode.commonModes)

答案 3 :(得分:3)

定时器在跟踪运行循环模式期间不会触发,这是您在滚动时所处的状态。有关详细信息,请查看有关运行循环模式的NSTimer文档或滚动视图上的WWDC 2012会话。

答案 4 :(得分:1)

滚动UITableview时,计时器不会重复。我们可以通过向RunLoop添加计时器来解决此问题。有关更多信息,请参见the documentation

Swift 4.1中的解决方案

self.updateTimer = Timer.scheduledTimer(timeInterval:1.0, target: self, selector: Selector(("updateFunction")), userInfo: nil, repeats: true)
RunLoop.current.add(self.updateTimer, forMode: RunLoopMode.common)