【问题标题】:how to stop timers in tabbar's three viewcontrollers from single viewcontroller in iphone?如何从 iphone 的单个视图控制器停止标签栏三个视图控制器中的计时器?
【发布时间】:2013-11-08 12:39:14
【问题描述】:

您好,我正在开发一个 iphone 应用程序,在我的应用程序中,我有一个场景,比如一个 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 中的所有计时器。

【问题讨论】:

    标签: ios iphone objective-c uiviewcontroller uitabbarcontroller


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        但是,你可以考虑使用一个共享的布尔变量,比如 shouldStopTimer,它可以在所有 viewControllers 中访问。

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

        其他

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-26
          • 2012-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多