Swift: Представление V C в обработчике завершения увольнения - PullRequest
0 голосов
/ 13 января 2020

У меня есть следующий поток ViewController (V C):

SplashScreen / запуск V C -> Логин V C (при наличии уведомления) -> SplashScreenV C -> Main V C

Я хочу избегать использования отката, потому что мне нужно будет регулярно проходить повторную аутентификацию пользователя независимо от текущего V C, и, таким образом, это довольно программно «присутствует».

Проблема в том, что я могу представить и отклонить SplashScreen V C (который изначально был root), но затем не могу сделать то же самое для Login V C без ошибки.

Код:

//in SplashScreen VC viewDidAppear

let loginVC = myStoryboard.instantiateViewController(identifier: "loginVC") as UIViewController
        loginVC.modalPresentationStyle = .fullScreen
        loginVC.modalTransitionStyle = .coverVertical

        //dismissal?
        self.dismiss(animated: true, completion: {
            self.present(loginVC, animated: true, completion: nil)
        })


//in loginVC selector function
let launchVC = myStoryboard.instantiateViewController(identifier: "launchVC") as UIViewController
        launchVC.modalPresentationStyle = .fullScreen
        launchVC.modalTransitionStyle = .coverVertical

        //check for top view controller (debugging)
        print("TOPVC at LoginVC: \(self.getTopVC()!)")

        //handle dismissal?
        self.dismiss(animated: true, completion: {
            self.present(launchVC, animated: true, completion: nil)
        })

ПРЕДУПРЕЖДЕНИЕ:

Warning: Attempt to present <Slidr.LaunchScreenViewController: 0x15be0ef90> on <Slidr.LoginViewController: 0x15be6b510> whose view is not in the window hierarchy!

Warning: Attempt to present <Slidr.TestingViewController: 0x15db00ac0> on <Slidr.LaunchScreenViewController: 0x15bd06960> whose view is not in the window hierarchy!

Код работает нормально, если я не отклоняю loginV C, но я хотел бы избежать контроллеров остатков со временем.

Я пытался представить сверху V C, а не 'себя', но это, похоже, ничего не меняет.

Любая помощь будет высоко ценится.

1 Ответ

2 голосов
/ 13 января 2020

Как говорит ошибка, вам нужно представить av c из 1, который в настоящее время отклонен, поэтому вместо этого сделайте

self.dismiss(animated: true, completion: {
   (UIApplication.shared.delegate as! AppDelegate).window?.rootViewController = loginVC
}

Другой способ также состоит в том, чтобы встроить rootV C в навигационный контроллер и сделать * 1004. *

self.navigationController?.setViewControlls([loginVC],animated:true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...