Paco Wong
Paco Wong

Reputation: 645

Swift 4 - 3D Touch Quick Actions With Tab Bar & Navigation Controller

I am trying to add 3D Touch Quick Actions from the home screen and I am using the following code:

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let tabVC = storyboard.instantiateViewController(withIdentifier: "TabVC") as! UITabBarController
        let mainVC = storyboard.instantiateViewController(withIdentifier: "NavMoreVC") as! UINavigationController
        let foodVC = storyboard.instantiateViewController(withIdentifier: "FoodVC") as! FoodTableViewController
        window?.rootViewController = tabVC
        self.window?.makeKeyAndVisible()
        mainVC.pushViewController(foodVC, animated: true)

I'm trying to navigate to the Find Food view controller after the user tapped on the shortcut, but the code above gives me an error in the console:

Unbalanced calls to begin/end appearance transitions for <UITabBarController: 0x10e022600>.

Is there a way for the app to push to the Find Food view controller while maintaining the Tab Bar and Navigation Controllers. Thanks!!

Navigation Structure

Upvotes: 2

Views: 1055

Answers (2)

Paco Wong
Paco Wong

Reputation: 645

Did some more digging and found the solution to it. I used the following code in the AppDelegate:

    let myTabBar = self.window?.rootViewController as? UITabBarController
    myTabBar?.selectedIndex = 0
    let nvc = myTabBar?.selectedViewController as? UINavigationController
    let vc = nvc?.viewControllers.first as? MoreViewController
    nvc?.popToRootViewController(animated: false)
    return vc!.openPageFor(shortcutIdentifier: shortcutIdentifier)

Then inside my MoreViewController I had a function that will call the different segues based on the shortcutIdentifier.

Upvotes: 2

Shehata Gamal
Shehata Gamal

Reputation: 100503

First you make the rootVC as the tab then the navigate should be from inside it

so subclass the tabBarControllber and in viewDidAppear , do the push according to navigate bool or logic shared inside your app

    let foodVC = storyboard.instantiateViewController(withIdentifier: "FoodVC") as! BusStatusTableViewController
    // here do segue to food VC

Upvotes: 1

Related Questions