mkul
mkul

Reputation: 810

Missing tab bar after segue to nested table view controller

enter image description here

My goal is to show specified row from TABLE2 after clicking button from VC1

After doing segue from VC1 to TABLE1 and then to TABLE2 my tab bar is missing. I have something wrong with storyboard, or I just must add this tab bar manually after doing segue? I'm doing segue to navigation controller, then I call performSegue from TABLE1 to TABLE2

TABLE2 after segue looks like:

enter image description here

But it should looks like:

enter image description here

Code for VC1:

class FirstViewController: UIViewController {

    @IBAction func performSegueTapped(_ sender: UIButton) {
        self.performSegue(withIdentifier: "segueFromMainWindow", sender: nil)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "segueFromMainWindow" {
            let destinationNavigationController = segue.destination as! UINavigationController
            let targetController = destinationNavigationController.topViewController as? FirstTableViewController
            targetController?.performSegue(withIdentifier: "testSegue", sender: nil)
        }
    }
}

Code for TABLE1:

class FirstTableViewController: UITableViewController {

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "testSegue", sender: nil)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let destCtrl = segue.destination as! SecondTableViewController
        destCtrl.testLabelText = "hello"
    }
}

Upvotes: 0

Views: 307

Answers (2)

kamil3
kamil3

Reputation: 1252

Set a custom identifier to your SecondTableViewController in Main.storyboard and then assign an IBAction to your button, like below:

@IBAction func performSegueButtonTouched(_ sender: UIButton) {
    let tabBarViewControllers = tabBarController?.viewControllers
    let tableNavigationController = tabBarViewControllers?[1] as! UINavigationController
    let firstTableViewController = tableNavigationController.topViewController as! FirstTableViewController
    let mainStoryboard = UIStoryboard.init(name: "Main", bundle: nil)
    let secondTableViewController = mainStoryboard.instantiateViewController(withIdentifier: "SecondTableViewController") as! SecondTableViewController
    secondTableViewController.testLabelText =  "Something"
    tabBarController?.selectedIndex = 1
    tableNavigationController.setViewControllers([firstTableViewController, secondTableViewController], animated: true)
}

Upvotes: 1

Swift_Dev
Swift_Dev

Reputation: 204

Check the TABLE2 viewController in storyboard. Make sure to un-check the "Hide Bottom Bar on Push".

OR try to force showing the tab bar.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let destCtrl = segue.destination as! SecondTableViewController
        destCtrl.hidesBottomBarWhenPushed = false
        destCtrl.testLabelText = "hello"
}

enter image description here

Upvotes: 0

Related Questions