在标签栏控制器中从一个 ViewController 到另一个 ViewController ?
Posted
技术标签:
【中文标题】在标签栏控制器中从一个 ViewController 到另一个 ViewController ?【英文标题】:Segue from one ViewController to another ViewController inside a Tab Bar Controller? 【发布时间】:2015-10-12 22:20:27 【问题描述】:在界面生成器中,我有一个UITabBarController
,它被设置为初始视图控制器。从标签栏控制器,我已经链接了三个独立的 ViewController;两个UIViewController
和一个UITableViewController
。我已将所有这三个视图都嵌入到 UINavigationController
中,因为这些视图中的每一个最终都会转向一个新视图。
Interface Builder
问题:
我现在想使用一个按钮将UIViewController
之一链接到UITableViewController
以连接到表格视图。这样我可以将信息(即func prepareForSegue()
)传递给表格视图。我想将标签栏控制器保留在底部,但是我不想通过视图顶部的UIBarButtonItem
从当前的UITableViewController
返回到以前的UIViewController
;这就是底部标签栏的用途。
但是,每次我继续“显示”表格视图(它实际上是表格视图导航控制器的转场)时,表格视图顶部和底部的导航栏都会消失。有没有办法防止这种情况发生?
我也尝试将“显示”直接转到表格视图,在这种情况下,标签栏是可见的,但随后它会在视图顶部显示一个“返回”按钮以继续发送到发送 UIViewController
.我对接受一个只隐藏后退按钮的解决方案犹豫不决,因为我觉得当我想从表格视图本身导航到详细视图时我会遇到问题,因为我会绕过UITableViewController
的UINavigationController
。
任何解决方案将不胜感激。我已经尝试解决这个问题好几个小时了,我正要通过我的电脑屏幕来解决这个问题。我还考虑过在按钮单击上使用tabBarController?.selectedIndex
以切换到表格视图,然后使用NSUserDefaults
传递信息,但这是不可能的,因为我将传递一个自定义对象,并且必须编码和解码每个自定义字段。
【问题讨论】:
【参考方案1】:我使用 segue 来实现它,正如你所说,你仍将使用 UIViewController
的 UINavigationController
,这似乎有点混乱。所以我实际上认为selectedIndex
可能是最好的方法,因为一旦您更改为UITableViewController
,您将位于正确的导航堆栈中。
不使用NSUserDefaults
,为什么不直接从UIViewController
引用UITableView
本身,设置您想要的值,然后使用self.tabBarController.selectedIndex
切换到它。
因此,对于上面的场景,假设UITableViewContollrer
是UITabBarController
中的第三个视图,您将执行以下操作:
通过在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
不会执行过渡动画,但不确定您是否需要它。 This link could help if you do.
【讨论】:
谢谢这工作......有点。我不得不改变一件事。您不能投射UINavigationController
as!
JarListTableViewController
。而不是let tableViewController = navController as! JarListTableViewController
,你必须说let tableViewController = navController.viewControllers[0] as! JarListTableViewController
。就这样。如果你更新你的答案,我会投票并接受它。
糟糕,抱歉。我忘了添加那部分。实际上,我的做法与我在上面更正的方式略有不同。希望你没有在我的愚蠢错误上浪费太多时间!
无论哪种方式都可以,我只是更喜欢使用完整的单词而不是数字。
嗯没有意识到 .first
是数组的关键字...无论如何,再次感谢!以上是关于在标签栏控制器中从一个 ViewController 到另一个 ViewController ?的主要内容,如果未能解决你的问题,请参考以下文章