我想知道当iOS切换应用时是否会调用viewWillDisappear:
和viewDidDisappear:
(例如,用户按下主页按钮)。这会导致视图从屏幕上消失,但是为此调用回调吗?
答案 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并设置断点。