从一个ViewController发送到Tab Bar Controller中的另一个ViewController?

时间:2015-10-12 22:20:27

标签: ios swift uinavigationcontroller segue uitabbar

在界面构建器中,我有一个UITabBarController,它被设置为初始视图控制器。从标签栏控制器,我已经链接了三个独立的ViewControllers;两个UIViewController和一个UITableViewController。我已在UINavigationController内嵌入了所有这三个视图,因为每个视图最终都会转换为新视图。

Interface Builder

问题:

我现在想要使用按钮将UIViewController&{39}中的一个链接到UITableViewController以转到表格视图。这样我就可以将信息(即func prepareForSegue())传递给表格视图。我想在底部维护标签栏控制器,但是我不希望能够通过UIViewController从当前UITableViewController返回到先前的UIBarButtonItem观点的顶部;这就是底部标签栏的用途。

然而,每当我离开" Show"表视图(它实际上是表视图导航控制器的一个segue),表视图顶部和底部的导航栏消失。反正有没有阻止这种情况发生?

我也尝试过segue" Show"直接到表视图,在这种情况下标签栏是可见的,但它显示"返回"视图顶部的按钮可以返回发送UIViewController。我对接受一个只隐藏后退按钮的解决方案犹豫不决,因为当我想要从表视图本身导航到详细视图时,我觉得我会遇到问题,因为我会绕过{{1 } {' s UITableViewController

任何解决方案都将不胜感激。我一直试图解决这个问题好几个小时,我正要把头伸进我的电脑屏幕。另外我想过在按钮点击上使用UINavigationController转移到表格视图,然后使用tabBarController?.selectedIndex传递信息,但这是不可能的,因为我要传递一个自定义对象,并且必须对每个自定义字段进行编码和解码。

1 个答案:

答案 0 :(得分:2)

我使用segue来实现它,正如你所说,你仍然会使用UIViewController的{​​{1}},这似乎有些混乱。所以我认为UINavigationController可能是最好的方法,因为一旦你更改为selectedIndex,你将进入正确的导航堆栈。

为什么不从UITableViewController引用NSUserDefaults本身,设置所需的值,然后使用UITableView交换它,而不是使用UIViewController。< / p>

因此,对于上面的方案,假设self.tabBarController.selectedIndexUITableViewContollrer中的第三个视图,您将执行以下操作:

  1. 通过在其中设置一些预定义的UITabBarController,将您想要的任何内容传递到UITabBarController。例如,如果var中有一个名为String的{​​{1}},请在saveMe中执行以下操作:

    UITableViewController
  2. 使用:

    切换到UIViewController
    let navController = self.tabBarController?.viewControllers![2] as! UINavigationController
    let tableViewController = navController.viewControllers.first as! JarListTableViewController
    tableViewController.saveMe = "Saved string here"
    
  3. 唯一的问题是使用UITableViewController不会执行过渡动画,但不确定是否需要此功能。 This link could help if you do.