20

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

4

2 回答 2

25

你可以。

我之前使用过的解决方案是在您的应用程序委托中使用applicationDidEnterBackground:and 。applicationWillEnterForeground:

在您的应用委托中执行此操作。

- (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()
    }
}
于 2015-08-27T11:59:16.560 回答
20

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

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

顺便说一句,找出这种事情的最简单方法是快速构建一个超级简单的应用程序并设置断点。

于 2013-09-10T21:00:54.997 回答