首页 > 解决方案 > 在 iOS 13 中应用/场景进入前台时设置 ViewController

问题描述

我的应用程序与许多应用程序(通常是银行应用程序)一样工作:当用户将应用程序移至后台时(例如,通过点击主页按钮),当前可见ViewController将被启动屏幕替换。当应用程序回到前台时,它会显示前一个ViewController或其他一些ViewController(这取决于许多条件,例如应用程序在后台的持续时间等 - 但这些在这里并不重要) .

在 iOS 12 及更早版本上,我使用了一个非常简单的机制 - on applicationDidEnterBackground,我将 current 设置ViewController为局部变量 onAppDelegate并显示启动屏幕。

savedViewController = window?.rootViewController

打开applicationWillEnterForeground时,我检查是否满足所有要求的条件并将Window's设置ViewController为已存储ViewController

window?.rootViewController = savedViewController

这不再适用于 iOS 13。当应用程序进入前台时,会显示初始故事猪。设置rootViewController电流Window完全没有影响。

我试图通过在我的应用程序中启用场景来解决这个问题,但这也不起作用。

SceneDelegate中,我可以ViewController在这样的scene:willConnecTo方法中设置默认值:

guard let windowScene = (scene as? UIWindowScene) else { return }

window = UIWindow(frame: windowScene.coordinateSpace.bounds)
window?.windowScene = windowScene

let launchStoryboard = UIStoryboard(name: "LaunchScreenVersion", bundle: Bundle.main)
let launchViewController = launchStoryboard.instantiateInitialViewController()

window?.rootViewController = launchViewController
window?.becomeKey()

上面的代码有效,但该方法仅在场景首次加载时调用。然后我尝试将我的代码从 from 移动applicationWillEnterForegroundsceneWillEnterForeground,但这也不起作用。当我在此方法中设置Window'sViewController时,它没有任何效果,并且仅ViewController初始加载集合。

我也尝试将代码移至sceneDidBecomeActive,但效果完全相同。

我知道 iOS 有内置的状态恢复,但是,由于安全策略,我们不能在应用程序中使用它们,因为如果应用程序不再运行,则无法保存用户状态。

有什么想法可以ViewController在应用程序进入后台时与启动屏幕交换并在应用程序进入前台时将其设置回来?

标签: swiftios13

解决方案


推荐阅读