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

gab*_*bor 17 objective-c ios

我在想,如果viewWillDisappear:viewDidDisappear:当开关的iOS应用程序(例如,Home键被用户按下)被调用.这会导致视图从屏幕上消失,但是为此调用回调吗?

Tre*_*kow 23

您可以.

我以前用过的解决方案是在你的app委托中使用applicationDidEnterBackground:applicationWillEnterForeground:.

在您的app委托中执行此操作.

- (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];
}
Run Code Online (Sandbox Code Playgroud)

现在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()
}
Run Code Online (Sandbox Code Playgroud)

编辑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()
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 由于某种原因,在我的例子中这些生命周期方法没有被调用。有什么想法为什么会发生这种情况吗? (2认同)

kgr*_*nek 19

不,在那种情况下不会调用那些方法.

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

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