Отклонение до root контроллера представления без отображения вложенного / промежуточного контроллера представления - PullRequest
0 голосов
/ 29 января 2020

Я хочу закрыть все промежуточные дочерние контроллеры представления и показать root контроллер представления.

Работает следующий фрагмент кода: self.view.window?.rootViewController?.dismiss(animated: true, completion: nil)

Однако я могу кратко увидеть контроллер промежуточного вида fla sh, прежде чем он выполнит анимацию для выброса в контроллер вида root. В любом случае, он просто напрямую оживляет контроллер вида root?

Ответы [ 2 ]

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

Вы можете попробовать снова установить rootViewController следующим образом:

let navigationController = UINavigationController(rootViewController: ViewController) 
let appdelegate = UIApplication.shared.delegate as! AppDelegate 
appdelegate.window!.rootViewController = navigationController
1 голос
/ 29 января 2020

Вам нужно вызвать

self.view.window?.rootViewController?.dismiss(animated: false, completion: nil)

animation false, если вы не хотите видеть промежуточные контроллеры, если он все еще имеет значение sh вы можете скрыть другие представленные представления или сделать их альфа 0

как

if let first = presentedViewController,
        let second = first.presentedViewController,
            let third = second.presentedViewController {
                second.view.alpha = 0
                first.view.alpha = 0
                    third.dismiss(animated: false)

     }

или непосредственно для rootViewController

let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = YourViewController

или в IOS 13 делегат сцены

 let scene = UIApplication.shared.connectedScenes.first
        if let getSceneDelegate : SceneDelegate = (scene?.delegate as? SceneDelegate) {
            getSceneDelegate.window?.rootViewController = YourController
        }
...