简体   繁体   中英

How to present a view controller from appdelegate xcode 11 swift 5

I have been searching all day on how to present a view controller from within the appdelegate. It appears that in xcode 11 the window property was moved to the scenedelegate which has been confusing me. I want to present a view controller from within the appdelegate from the didReceiveRemoteNotification function so when the user receives a notification it takes them to a separate view controller with information. I have tried to do:

self.window?.rootViewController?.present(LoginViewController(), animated: false, completion: nil)

within the appdelegate which used to work in a previous application of mine but it does not seem to work anymore. Any help would be much appreciated.

I was able to solve this issue by using shared windows to get the window from scenedelegate to present the view controller on.

UIApplication.shared.windows.first?.rootViewController?.present(vc, animated: false, completion: nil)

Best approach to present view controller through app delegate is without falling for hierarchy like below:

if let vc = UIStoryboard(name: "YOURSTORYBOARD", bundle: nil).instantiateViewController(withIdentifier: "YOURVIEWCONTROLLER") as? YOURVIEWCONTROLLER {
if let window = self.window, let rootViewController = window.rootViewController {
    var currentController = rootViewController
    while let presentController = currentController.presentedViewController {
        currentController = presentController
    }
       currentController.present(vc, animated: true, completion: nil)
   }
} 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM