如何知道UIViewController视图何时在后台显示?

时间:2010-12-14 20:23:25

标签: iphone uiviewcontroller

在iOS4.2 / iPhone4中

  • 点击图标启动应用(某些视图 显示控制器视图)
  • 单击iPhone主页按钮(返回 主屏幕)
  • 双击主页按钮
  • 选择之前推出的应用 选择

现在我可以看到我的app delegate在最后一步之后选中它时会收到一条消息“applicationDidBecomeActive”,但是我的viewController(当前显示的视图的人)如何知道?

viewDidLoad已被调用,因此不会再次调用。不会再次调用viewWillLoad。

似乎无法弄明白。我问的原因是我想检查是否有任何设置更改,但是想在视图控制器中执行此操作,因为这是关心的事情。

3 个答案:

答案 0 :(得分:12)

答案在这里:Handling applicationDidBecomeActive - "How can a view controller respond to the app becoming Active?"

使用NSNotificationCenter通知视图控制器中的UIApplicationDidBecomeActiveNotification个事件。

答案 1 :(得分:5)

在你的appDelegate applicationDidBecomeActive中放了这个:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    UINavigationController *navc = (UINavigationController *)[tabBarController selectedViewController];

    UIViewController *topvc = [navc topViewController];

    if ([topvc respondsToSelector:@selector(viewControllerDidBecomeActive)]) 
    {
        [topvc performSelector:@selector(viewControllerDidBecomeActive)];
    }
}

这将获得在屏幕上看到的viewController。您只需在每个viewControllers上实现viewControllerDidBecomeActive;)

答案 2 :(得分:0)

在appDelegate applicationDidBecomeActive中设置一个布尔属性,标记它刚出现在背景中。

然后在你的viewcontroller中,特别是在viewDidAppear覆盖中,检查appDelegate属性,如果它是true,那么你知道它来自后台,否则它刚出现正常。 BTW之后,将boolean属性设置为false以获得整洁。

编辑 - 除非您重新创建导航堆栈,否则必须在applicationDidBecomeActive中手动调用viewDidAppear。如果您能够获得指向当前可见视图控制器的指针,那么调用viewDidAppear应该是一个没有问题的方法,因为所有视图控制器都有此方法。你不需要任何代表或等等。