![](/img/trans.png)
[英]Segue not working from the viewcontroller inside tabbar controller
[英]Segue from one ViewController to another ViewController inside a Tab Bar Controller?
在界面构建器中,我有一个UITabBarController
并将其设置为初始视图控制器。 从标签栏控制器,我链接了三个独立的ViewController; 两个UIViewController
和一个UITableViewController
。 我将所有这三个视图都嵌入了UINavigationController
,因为这些视图中的每一个最终都会选择到一个新视图。
问题:
我现在想使用一个按钮将一个UIViewController
链接到UITableViewController
,以选择到表视图。 这样,我可以将信息(即func prepareForSegue()
传递到表视图。 我想将标签栏控制器保持在底部,但是我不希望能够通过视图顶部的UIBarButtonItem
从当前的UITableViewController
返回到以前的UIViewController
; 这就是底部的标签栏的作用。
但是,每次我选择“显示”表视图时(实际上是对表视图导航控制器的选择),表视图顶部和底部的导航栏都会消失。 是否有防止这种情况发生的方法?
我也尝试过直接将“ Show”设置为表格视图,在这种情况下,标签栏可见,但是随后它在视图顶部显示了一个“ back”按钮,以将其设置为发送方UIViewController
。 我不愿接受只隐藏后退按钮的解决方案,因为当我想从表视图本身导航到详细视图时,我会遇到麻烦,因为我将绕过UITableViewController
的UINavigationController
。
任何解决方案将不胜感激。 数小时以来,我一直在试图解决这个问题,而我正要把头放在电脑屏幕上。 我还考虑过只单击按钮上的tabBarController?.selectedIndex
即可切换到表格视图,然后使用NSUserDefaults
传递信息,但这是NSUserDefaults
,因为我将传递自定义对象,并且必须进行编码并解码每个自定义字段。
正如您所说,我使用segue来实现它,但是仍然会使用UIViewController
的UINavigationController
,这似乎有些混乱。 所以我实际上认为selectedIndex
可能是最好的selectedIndex
,因为一旦更改为UITableViewController
您将进入正确的导航堆栈。
除了使用NSUserDefaults
,为什么不直接从UIViewController
引用UITableView
本身,设置所需的值,然后使用self.tabBarController.selectedIndex
交换给它。
因此,对于上面的场景,假设UITableViewContollrer
是UITabBarController
的第三个视图,您将执行以下操作:
通过在其中设置一些预定义的var
,将所需的任何内容传递给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
不会执行过渡动画,但不确定是否需要此动画。 如果您这样做,此链接可能会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.