我是初学者,我正在尝试为iOS编写和应用程序,它将在主屏幕中向用户显示从25分钟到0的计时器(由UILabel
组成的每个文本都会更新第二个使用NSTimer
)和UITableView
(嵌入在主屏幕的UIViewController
中),每次定时器达到0时都会显示一个单元格。
所以在我UIViewController
控制的主视图中,我有:
- UILabel
:用于计时器
- UITableView
:每次定时器达到0时显示一个单元格
- UIButton
:启动计时器
除非用户将手指放在tablewView上,滚动UITableView
将阻止计时器更新标签这一事实似乎一切正常。任何人都可以告诉我为什么标签在滚动UITableView
时不会改变其文字?
P.S。我认为这个问题可能与我没有使用线程的事实有关,因为我还没有学会使用它们。
答案 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)