如何将新的视图控制器推送到当时在 tabbarcontroller 中存在的 navigationcontroller?
Posted
技术标签:
【中文标题】如何将新的视图控制器推送到当时在 tabbarcontroller 中存在的 navigationcontroller?【英文标题】:How to push a new view controller to the navigationcontroller present at that time in tabbarcontroller? 【发布时间】:2013-10-16 12:36:26 【问题描述】:我有一个 tabbarcontroller 应用程序,我在其中创建了这样的应用程序
UITabBarcontroller (UIWindow's rootViewController)
->UINavigationController (first tab)
-->UIViewController
->UINavigationController (second tab)
-->UIViewController
在导航栏中,我有一个按钮,我在其中将另一个视图控制器推送到 self .navigation 控制器。但现在我也希望另一个导航控制器也执行相同的操作。所以我需要推送到导航控制器,它是顶视图控制器。我需要用一种方式替换[self.navigationController pushViewController:viewcontroller animated:NO];
,无论我们需要添加到标签栏控制器中的导航控制器是什么。任何主体都可以帮我解决这个问题?
【问题讨论】:
【参考方案1】:比持有对当前可见的 UInavigationController 的引用要简单得多(您应该持有来自 UITabBarController 委托 tabBarController:didSelectViewController:
的引用)
所以你在你的 AppDelegate 中添加一个变量:
UINavigationController *navController;
然后:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
if (viewController.navigationController)
navController = viewController.navigationController;
现在,你用这种方式推送:
if (navController)
[navController pushViewController:viewcontroller animated:NO];
【讨论】:
我认为 tabBarController:didSelectViewController 中的 viewController 应该已经是 NavigationController 是的,正确,但是 viewController.navigationController 无论如何都应该正确返回它。【参考方案2】:所以首先你需要访问TabBarController
。我想你可以在 AppDelegate
的某个地方找到它。
然后你可以打电话:
UIViewController *ctrl = myTabBarCtrl.selectedViewController;
[ctrl.navigationController pushViewController:viewcontroller animated:NO];
【讨论】:
这有一个问题,如果用户选择了一个简单的 UIViewController 选项卡,它将崩溃,因为myTabBarCtrl.selectedViewController
将返回一个 UIViewController
而不是 UINavigationController
对象
当然。它基于 TC 的导航设计。但我已经更新了代码,使其更加稳定。以上是关于如何将新的视图控制器推送到当时在 tabbarcontroller 中存在的 navigationcontroller?的主要内容,如果未能解决你的问题,请参考以下文章
UIPopovercontroller 在将新的视图控制器推送到 navccontroller 后调整大小
postgresql 函数 - 如何将新的 json 对象推送到 json 数组?
如何将新的 UICollectionViewController 推送到单元格单元格内的 navigationController