繁体   English   中英

在一个标签栏控制器中从一个ViewController切换到另一个ViewController?

[英]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 我不愿接受只隐藏后退按钮的解决方案,因为当我想从表视图本身导航到详细视图时,我会遇到麻烦,因为我将绕过UITableViewControllerUINavigationController

任何解决方案将不胜感激。 数小时以来,我一直在试图解决这个问题,而我正要把头放在电脑屏幕上。 我还考虑过只单击按钮上的tabBarController?.selectedIndex即可切换到表格视图,然后使用NSUserDefaults传递信息,但这是NSUserDefaults ,因为我将传递自定义对象,并且必须进行编码并解码每个自定义字段。

正如您所说,我使用segue来实现它,但是仍然会使用UIViewControllerUINavigationController ,这似乎有些混乱。 所以我实际上认为selectedIndex可能是最好的selectedIndex ,因为一旦更改为UITableViewController您将进入正确的导航堆栈。

除了使用NSUserDefaults ,为什么不直接从UIViewController引用UITableView本身,设置所需的值,然后使用self.tabBarController.selectedIndex交换给它。

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

  1. 通过在其中设置一些预定义的var ,将所需的任何内容传递给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不会执行过渡动画,但不确定是否需要此动画。 如果您这样做,此链接可能会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM