2

如果我的应用程序进入后台,我想关闭模式视图控制器。我假设将代码放在 applicationDidEnterBackground 中就可以了,但不幸的是,直到应用程序下次进入前台时,该命令才会应用于屏幕。一瞬间,您可以看到原始的模态视图控制器,然后消失。

有没有像 applicationWillEnterBackground 这样的方法?或者有没有办法在应用程序进入后台之前更新 UI。

目前我有这个代码:

- (void)applicationDidEnterBackground:(UIApplication *)application {   

    NSLog(@"Application entered background state.");

    [splitVO dismissViewControllerAnimated:true completion:nil];
}
4

5 回答 5

4

尝试将animated参数设置为NO.

于 2013-08-02T10:48:46.163 回答
0

尝试启用后台任务 Identifire

- (void)applicationDidEnterBackground:(UIApplication *)application {   

    NSLog(@"Application entered background state.");


    UIBackgroundTaskIdentifier bgTask;

    UIApplication *app = [UIApplication sharedApplication];

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];
    [splitVO dismissViewControllerAnimated:true completion:nil];
}
于 2013-08-02T10:41:59.533 回答
0

您的委托的 applicationDidEnterBackground: 方法有大约 5 秒的时间来完成任何任务并返回。在实践中,此方法应尽快返回。如果该方法在时间用完之前没有返回,您的应用程序将被终止并从内存中清除。如果您仍然需要更多时间来执行任务,请调用 beginBackgroundTaskWithExpirationHandler: 方法来请求后台执行时间,然后在辅助线程中启动任何长时间运行的任务。无论您是否启动任何后台任务,applicationDidEnterBackground: 方法仍必须在 5 秒内退出。

基本上,在将 UIViewController 的视图添加到应用程序的 UIWindow 层次结构后,会调用 viewDidAppear。后台处理然后恢复应用程序不会在这方面改变您的视图,因此不会调用 viewDidAppear - 这是正确的行为,而不是错误。查看 UIViewController 的 API 文档。

于 2013-08-02T10:29:05.440 回答
0

您可以尝试将使 UI 更改的代码添加到以下应用程序委托方法。

-(void)applicationWillResignActive:(UIApplication *)application{

}

当应用程序仍在屏幕上但将转换为非活动状态时,将调用此应用程序委托方法,然后它将在短时间内进入后台状态,即。applicationDidEnterBackground方法将在上述方法之后立即执行。所以这里是进行 UI 更改的正确位置。在将应用程序从后台返回到前台时,此处所做的更改可以通过以下方法恢复,该方法将在应用程序在屏幕上显示给您之前被调用。

-(void)applicationWillEnterForeground:(UIApplication *)application{

}
于 2013-08-02T10:56:52.177 回答
0

订阅通知 UIApplicationWillResignActiveNotification。作为对此的回应,您可以更新您的 UI。

于 2013-08-02T10:44:33.227 回答