swift - 在 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 移动applicationWillEnterForeground
到sceneWillEnterForeground
,但这也不起作用。当我在此方法中设置Window
'sViewController
时,它没有任何效果,并且仅ViewController
初始加载集合。
我也尝试将代码移至sceneDidBecomeActive
,但效果完全相同。
我知道 iOS 有内置的状态恢复,但是,由于安全策略,我们不能在应用程序中使用它们,因为如果应用程序不再运行,则无法保存用户状态。
有什么想法可以ViewController
在应用程序进入后台时与启动屏幕交换并在应用程序进入前台时将其设置回来?
解决方案
推荐阅读
- javascript - 使用 vuejs 挂钩 tsx 时出现 tsx-loader 错误
- php - ioncube - 混淆 php 文件中的单个函数
- php - Doctrine - 使用列值作为数组索引
- cluster-computing - 什么是聚类二进制矩阵的合适方法
- java - Gson 在对象列表中包含字段并排除策略
- python - 不能在 Celery 中使用 SQLite 作为后端
- python - 如何使用win32实现类似VBA的“Range.Find”?
- java - 我正在使用 SOQL 使用 java 访问 salesforce 的数据
- mysql - SQL 搜索未找到所有值
- jenkins - 我正在尝试使用 jenkins 中的 owasp ZAP 对 Web 应用程序进行自动化安全测试。我遇到了以下问题