Выход из системы для приложения, имеющего несколько раскадровок Swift 5 (возврат к корневому контроллеру представления)

Как вернуться к контроллеру rootview в Swift 5, где вместо Appdelegate доступен scenedelegate

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
//        guard let _ = (scene as? UIWindowScene) else { return }
        if let windowScene = scene as? UIWindowScene {
            self.window = UIWindow(windowScene: windowScene)
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let initialViewController =
                storyboard.instantiateViewController(withIdentifier: "first_page")
            self.window!.rootViewController = initialViewController
            self.window!.makeKeyAndVisible()
        }
    }

это мой код делегата сцены, который нужно отклонить / вернуться на мою первую страницу.

у меня первая страница в Main.storyboard, но моя функция выхода из системы находится в другой раскадровке под названием Home.storyboard

пытался

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

а также

self.navigationController?.popToRootViewController(animated: true)

Но не работает, у меня есть только один контроллер навигации, который предназначен для первого контроллера просмотра.


person Midhun Narayan    schedule 18.02.2020    source источник


Ответы (2)


Попробуй это:-

let viewController = UIApplication.shared.windows.first!.rootViewController as! 
YourViewController

А затем используйте этот viewController

person iOS Developer    schedule 18.02.2020
comment
Можно ли сделать мой контроллер навигации контроллером rootview? - person Midhun Narayan; 18.02.2020
comment
Думаю, вы можете попробовать этот ответ stackoverflow.com/a/58084612/10842413 - person iOS Developer; 18.02.2020

Вы можете попробовать использовать topController для отклонения / возврата или представления / нажатия:

    if var topController = UIApplication.shared.keyWindow?.rootViewController  {
        while let presentedViewController = topController.presentedViewController {
            topController = presentedViewController
        }
    }
person Son Pham    schedule 18.02.2020