Reputation: 810
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:
But it should looks like:
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
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
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"
}
Upvotes: 0