切换应用时是否会调用viewWillDisappear / viewDidDisappear?

时间:2013-09-10 20:54:26

标签: ios objective-c

我想知道当iOS切换应用时是否会调用viewWillDisappear:viewDidDisappear:(例如,用户按下主页按钮)。这会导致视图从屏幕上消失,但是为此调用回调吗?

2 个答案:

答案 0 :(得分:20)

你可以。

我之前使用的解决方案是在您的应用代理中使用applicationDidEnterBackground:applicationWillEnterForeground:

在您的app delegate中执行此操作。

- (void)applicationDidEnterBackground:(UIApplication *)application {
    [self.window.rootViewController beginAppearanceTransition:NO animated:NO];
    [self.window.rootViewController endAppearanceTransition];
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    [self.window.rootViewController beginAppearanceTransition:YES animated:NO];
    [self.window.rootViewController endAppearanceTransition];
}

现在,当您的应用转到后台并返回前台时,您的视图控制器层次结构的viewWillDisappear:viewDidDisappear:viewWillAppear:viewDidAppear:方法将被调用。

希望这有效吗?

编辑24/11/16(Swift 3版本)

func applicationDidEnterBackground(_ application: UIApplication) {
    window?.rootViewController?.beginAppearanceTransition(false, animated: false)
    window?.rootViewController?.endAppearanceTransition()
}

func applicationWillEnterForeground(_ application: UIApplication) {
    window?.rootViewController?.beginAppearanceTransition(true, animated: false)
    window?.rootViewController?.endAppearanceTransition()
}

编辑2/1/2017(所有窗口)

func applicationDidEnterBackground(_ application: UIApplication) {
    for window in application.windows {
        window.rootViewController?.beginAppearanceTransition(false, animated: false)
        window.rootViewController?.endAppearanceTransition()
    }
}

func applicationWillEnterForeground(_ application: UIApplication) {
    for window in application.windows {
        window.rootViewController?.beginAppearanceTransition(true, animated: false)
        window.rootViewController?.endAppearanceTransition()
    }
}

答案 1 :(得分:15)

不,在这种情况下不会调用这些方法。

要在应用程序进入后台时收到通知,您可以注册UIApplicationWillResignActiveNotification通知。

顺便说一句,最简单的方法就是快速构建一个超级简单的app并设置断点。

相关问题