从一个ViewController继续到Tab Bar Controller内的另一个ViewController?

在界面生成器中我有一个UITabBarController ,它被设置为初始视图控制器。 在标签栏控制器中,我链接了三个独立的ViewController; 两个UIViewController和一个UITableViewController 。 我在UINavigationController的内部embedded了所有这三个视图,因为每个视图都会最终延伸到一个新的视图。

界面生成器

问题:

我现在想用UIViewController的一个UITableViewController来连接到表视图。 这样我可以传递信息,即func prepareForSegue() ,到表视图。 我想维护底部的标签栏控制器,但是我不想有能力从当前的UITableViewController通过视图顶部的UIBarButtonItem回到以前的UIViewController ; 这就是底部的标签栏。

然而,每当我继续“显示”表视图(它实际上是表视图导航控制器的延续)时,表视图顶部和底部的导航栏消失。 无论如何要防止这种情况发生?

我也尝试过segue“Show”直接到表视图,在这种情况下,标签栏是可见的,但它然后显示在视图顶部的“返回”button继续发送UIViewController 。 我对接受隐藏后退button的解决scheme犹豫不决,因为我觉得当我想从表视图本身导航到一个细节视图时,我会遇到问题,因为我会绕过UITableViewControllerUINavigationController

任何解决scheme将不胜感激。 我一直试图解决这个问题好几个小时,而我即将把我的脑袋通过我的电脑屏幕。 此外,我想只是使用tabBarController?.selectedIndexbutton单击切换到表视图,然后使用NSUserDefaults传递信息,但这是NSUserDefaults ,因为我会传递一个自定义的对象,并将不得不编码并解码每个自定义字段。

我使用segue来实现,就像你说的那样,你仍然会使用UIViewControllerUINavigationController ,这看起来有点麻烦。 所以我实际上认为selectedIndex可能是最好的方法,因为一旦你改变了UITableViewController你将会在正确的导航堆栈中。

为什么不从UIViewController引用UITableView本身,而是使用NSUserDefaults ,设置所需的值,然后使用self.tabBarController.selectedIndex交换到它。

因此,对于上面的场景,假设UITableViewContollrerUITabBarController的第三个视图,则可以执行以下操作:

  1. 通过设置一些预定义的UITabBarController ,把你想要的任何东西传递给UITabBarController 。 例如,如果在UITableViewController有一个名为saveMeString ,那么在UIViewController执行以下操作:

     let navController = self.tabBarController?.viewControllers![2] as! UINavigationController let tableViewController = navController.viewControllers.first as! JarListTableViewController tableViewController.saveMe = "Saved string here" 
  2. 使用以下方法交换到UITableViewController

     self.tabBarController?.selectedIndex = 2 

唯一的问题是使用selectedIndex不会执行过渡animation,但不知道你是否需要这个。 如果你这样做,这个链接可以帮助你