您好我正在开发一个iphone应用程序,在我的应用程序中,我有一个像UItabbar控制器有两个UIview控件的场景。在每个视图控制器中,我有单独的nstimer。
我想知道如何从一个视图控制器中停止所有计时器。
我的计时器代码如下
-(void)startTimer
{
if (_timer == nil)
{
_timer = [NSTimer scheduledTimerWithTimeInterval:10.0f
target:self
selector:@selector(setProgress)
userInfo:nil
repeats:YES];
}
}
- (void)stopTimer
{
if (_timer != nil)
{
[_timer invalidate];
_timer = nil;
}
}
-(void)setProgress
{
[self stopTimer];
[self initmethod];
}
如果我导航到uiviewcontroller之一的任何其他页面,我只是通过回调方法进行stoped和invoks。如果我从一个uiviewcontroller导航到其他页面意味着我想在所有三个uiviewcontroller中停止所有计时器。
答案 0 :(得分:2)
子类uitabbarcontroller并添加方法'stopAllTimers'。该方法将遍历其viewControllers数组,每次发送一个'stopTimer'消息。
答案 1 :(得分:1)
原因,您可以在所有VC的
中使用NSNotification但是如果你的重复计时器主要用于VC的更新,那么更好的方法是为每个人保存“上次看到的”时间(在viewDidDisappear中)并检查在viewWillAppear方法中保存的时间是否足够远< / p>
答案 2 :(得分:0)
没有直接的方法可以做到这一点。
但是,您可以考虑使用共享的bool变量,例如 shouldStopTimer ,可以在所有viewControllers中访问。
如果 shouldStopTimer 为NO,请在“ setProgress ”方法中添加一项检查。 如果在“ setProgress ”方法中找到 shouldStopTimer 为YES,则使计时器无效。
否则
您可以使用NSNotification使各自的viewControllers中的计时器无效。