0

嗨,我正在开发一个 iphone applicaiton,在我的应用程序中,我有一个场景,比如一个 UItabbar 控制器,它有两个 UIviewcontrollers。在每个视图控制器中,我都有单独的 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 之一导航到任何其他页面,我刚刚停止并通过回调方法调用。如果我从 uiviewcontroller 之一导航到其他页面,则意味着我想停止所有三个 uiviewcontroller 中的所有计时器。

4

3 回答 3

2

子类 uitabbarcontroller 并添加一个方法“stopAllTimers”。该方法将遍历其视图控制器数组,向每个视图控制器发送一条“stopTimer”消息。

于 2013-11-08T12:43:35.647 回答
1

当然,您可以在所有 VC 中使用 NSNotification

但是,如果您的重复计时器主要用于更新 VC,更好的方法是为每个人保存“最后一次看到”时间(在 viewDidDisappear 中)并检查在 viewWillAppear 方法中保存的时间是否足够远

于 2013-11-08T12:48:30.503 回答
0

没有直接的方法可以做到这一点。

但是,您可以考虑使用一个共享的布尔变量,比如shouldStopTimer,它可以在所有视图控制器中访问。

如果shouldStopTimer为 NO ,请在“ setProgress ”方法中添加检查。如果您在“ setProgress ”方法中发现shouldStopTimer为 YES,则使计时器无效。

别的

您可以使用 NSNotification 使各自 viewController 中的计时器无效。

于 2013-11-08T12:51:50.413 回答