Установите ViewController, когда приложение / сцена выходит на передний план в iOS 13 - PullRequest
0 голосов
/ 20 сентября 2019

Мое приложение работает так же, как и многие обычные банковские приложения: когда пользователь перемещает приложение в фоновый режим (например, нажав кнопку «Домой»), текущий видимый ViewController заменяется экраном запуска.Когда приложение возвращается на передний план, оно отображает предыдущий ViewController или какой-либо другой ViewController (который зависит от ряда условий, таких как, например, продолжительность приложения в фоновом режиме и т. Д.), Ноони здесь не важны).

В iOS 12 и более ранних версиях я использую очень простой механизм - на applicationDidEnterBackground я устанавливаю текущую ViewController для локальной переменной на AppDelegate и отображаю запускscreen.

savedViewController = window?.rootViewController

Вкл. applicationWillEnterForeground, я проверяю, выполнены ли все необходимые условия, и устанавливаю Window '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()

Приведенный выше код работает, но метод вызывается только при первой загрузке сцены,Затем я попытался переместить свой код с applicationWillEnterForeground на sceneWillEnterForeground, но это тоже не сработало.Когда я установил Window ViewController в этом методе, это не имеет никакого эффекта, и изначально загружается только ViewController.

Я также попытался переместить код в sceneDidBecomeActive,но это имело точно такой же эффект.

Я знаю, что iOS имеет встроенное восстановление состояния, но из-за политик безопасности мы не можем использовать их в приложении, так как никакое пользовательское состояние не может быть сохранено, еслиприложение больше не работает.

Есть идеи, как мне поменять ViewController с заставкой, когда приложение переходит в фоновый режим, и установить его обратно, когда приложение выходит на передний план?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...