简体   繁体   中英

Can't push view controller in AppDelegate with TabBarController

I have a TabBarController as a rootViewController for my app. And I'm trying to push view controller when user clicks to notification. But code isn't working. How can I push view controller from AppDelegate without storyboards.

AppDelegate.swift

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    window = UIWindow(frame: UIScreen.main.bounds)
    window?.rootViewController = TabBarController()
    window?.makeKeyAndVisible()

    return true
    }

You can try to embed the tab inside a navigation

 let nav = UINavigationController(rootViewController: TabBarController())
 nav.isNavigationBarHidden = true
 window?.rootViewController = nav

Then inside didReceiveRemoteNotification

if let nav = self.window?.rootViewController as? UINavigationController {
    nav.pushViewController(////
}

to show nav inside the vc viewDidLoad

self.navigationController?.isNavigationBarHidden = false

You should not embed UITabBarController in a UINavigationController (as written in Apple Documentation init and push ). However, it's working.

The correct solution is to use UINavigationController as tabs in UITabBarController:

let tabBarController = TabBarController()
tabBarController.viewControllers = [UINavigationController(rootViewController: vc1), UINavigationController(rootViewController: vc2)]
window?.rootViewController = tabBarController

and then push to them:

let navigationController = tabBarController.selectedViewController as? UINavigationController
navigationController?.pushViewController(notificationViewController)

Or you can create a new view controller and settng it as a rootViewController of window:

window?.rootViewController = notificationViewController

But this requires more navigation code to setting back tabBarController after dismissing notification etc.

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