从一个ViewController继续到Tab Bar Controller内的另一个ViewController?
在界面生成器中我有一个UITabBarController
,它被设置为初始视图控制器。 在标签栏控制器中,我链接了三个独立的ViewController; 两个UIViewController
和一个UITableViewController
。 我在UINavigationController
的内部embedded了所有这三个视图,因为每个视图都会最终延伸到一个新的视图。
界面生成器
问题:
我现在想用UIViewController
的一个UITableViewController
来连接到表视图。 这样我可以传递信息,即func prepareForSegue()
,到表视图。 我想维护底部的标签栏控制器,但是我不想有能力从当前的UITableViewController
通过视图顶部的UIBarButtonItem
回到以前的UIViewController
; 这就是底部的标签栏。
然而,每当我继续“显示”表视图(它实际上是表视图导航控制器的延续)时,表视图顶部和底部的导航栏消失。 无论如何要防止这种情况发生?
我也尝试过segue“Show”直接到表视图,在这种情况下,标签栏是可见的,但它然后显示在视图顶部的“返回”button继续发送UIViewController
。 我对接受隐藏后退button的解决scheme犹豫不决,因为我觉得当我想从表视图本身导航到一个细节视图时,我会遇到问题,因为我会绕过UITableViewController
的UINavigationController
。
任何解决scheme将不胜感激。 我一直试图解决这个问题好几个小时,而我即将把我的脑袋通过我的电脑屏幕。 此外,我想只是使用tabBarController?.selectedIndex
button单击切换到表视图,然后使用NSUserDefaults
传递信息,但这是NSUserDefaults
,因为我会传递一个自定义的对象,并将不得不编码并解码每个自定义字段。
我使用segue来实现,就像你说的那样,你仍然会使用UIViewController
的UINavigationController
,这看起来有点麻烦。 所以我实际上认为selectedIndex
可能是最好的方法,因为一旦你改变了UITableViewController
你将会在正确的导航堆栈中。
为什么不从UIViewController
引用UITableView
本身,而是使用NSUserDefaults
,设置所需的值,然后使用self.tabBarController.selectedIndex
交换到它。
因此,对于上面的场景,假设UITableViewContollrer
是UITabBarController
的第三个视图,则可以执行以下操作:
-
通过设置一些预定义的
UITabBarController
,把你想要的任何东西传递给UITabBarController
。 例如,如果在UITableViewController
有一个名为saveMe
的String
,那么在UIViewController
执行以下操作:let navController = self.tabBarController?.viewControllers![2] as! UINavigationController let tableViewController = navController.viewControllers.first as! JarListTableViewController tableViewController.saveMe = "Saved string here"
-
使用以下方法交换到
UITableViewController
:self.tabBarController?.selectedIndex = 2
唯一的问题是使用selectedIndex
不会执行过渡animation,但不知道你是否需要这个。 如果你这样做,这个链接可以帮助你