如何停止来自其他 viewController 的计时器

How to stop a timer from other viewControllers

我从没想过这会很复杂,但显然是这样。

我有一个选项卡式视图控制器。其中一个 ViewController 有一个计时器。

一旦使用选项卡控制器选择了另一个视图控制器,或选择了任何其他视图(使用 table 视图行选择),我希望计时器停止。

我不确定为什么,但我不知道该怎么做。我假设我可以将 timer.invalidate() 放在与选项卡选择关联的 ViewController 中的 viewDidAppear() 中,但它不起作用。

有什么建议吗?

尝试使用tabBarController:didSelectViewController:

Tells the delegate that the user selected an item in the tab bar.

func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
  if (viewController == targetViewController) {
    viewController.timer.invalidate()
  }
}

视图有许多可以接收的通知,您可以为其编写处理程序。

正如我的评论中提到的,其中一个是 viewWillDisappear

他们是:

  • viewWillAppear:

  • viewDidAppear:

  • viewWillDisappear:

  • viewDidDisappear:

它们一起让您对视图的来来去去做出反应。

关于 UIViewController 和 UIView 的文档比其他任何文档都值得花时间深入阅读,因为它们是 Cocoa 中所有显示和交互的基础。