如何同时切换 tab 和 pushViewController?

Posted

技术标签:

【中文标题】如何同时切换 tab 和 pushViewController?【英文标题】:How to switch tabs and pushViewController at the same time? 【发布时间】:2009-08-24 14:12:00 【问题描述】:

我的应用中有两个选项卡,左侧选项卡是普通的 UIViewController,右侧选项卡是导航控制器,里面有一个表格视图。我想让用户按下左侧选项卡上的按钮并跳转到属于右侧选项卡上表格视图中特定行的特定详细信息视图。

在表格视图本身中,我可以毫无问题地显示特定的详细视图,例如:

[self.navigationController pushViewController:theView animated:YES];

我也可以使用跳转标签

self.tabBarController.selectedIndex = 1; // 1= right tab

但我不知道如何做到这两点。我试过了

self.tabBarController.selectedIndex = 1; // 1= right tab
// alloc and init theView here
[self.navigationController pushViewController:theView animated:YES];

但这不起作用。

编辑:

当我尝试上面的代码时,它只是切换选项卡但不推送视图。

我也尝试了 criscokid 的建议,但没有任何反应。

编辑 2:

尝试解释每个选项卡上的内容:

根(标签栏控制器) | --(Left Tab)-- UIViewController (我想从这里走...) | --(右标签)---UINavigationController | ---UITableViewController | ----UIViewController (...到这里) ^ 包含特定行数据的特定视图 在表格视图中(即上面的“theView”)

【问题讨论】:

【参考方案1】:

对我来说正确的方法是:

 UINavigationController * navigationController = (UINavigationController *) [[self tabBarController] selectedViewController];
 [navigationController pushViewController:viewController animated:YES];

criscokid 的回答对navigationController 有一个多余的调用。 那是因为你的selectedViewController 实际上是一个UINavigationViewController

【讨论】:

我在冗余调用中犯了同样的错误。这为我解决了问题。【参考方案2】:

如果您要切换选项卡栏并以相同的方法将 ViewController 推送到导航控制器堆栈,您不会想使用 self.navigationController。如果我理解正确,您想将其添加到右侧选项卡上的 navigationController 中。我相信你会想使用:

[[[[self tabBarController] selectedViewController] navigationController] pushViewController:theView animated:YES];

【讨论】:

这对我不起作用。如果我正确理解您的代码,您可以调用导航控制器上的 pushview,该控制器应该是选项卡栏中当前选定视图控制器的父级。但是没有父导航控制器,因为它只在右侧选项卡上。 你能再解释一下每个标签上的内容吗?

以上是关于如何同时切换 tab 和 pushViewController?的主要内容,如果未能解决你的问题,请参考以下文章

同时切换 Tabs 和重置 Nav 的 View Controllers - Swift iOS

qtabwidget切换tab如何修改

在vue中使用elementUI饿了么框架使用el-tabs,切换Tab如何实现实时加载,以及el-table表格使用总结

android实现tab个数少且固定,fragment不同时切换处理

局部区块多个报表 TAB 页切换及局部区块的参数查询

viewpager+fragment三页面tab切换并且实现同时上传三个页面的信息