如何将新的视图控制器推送到当时在 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 后调整大小

iPhone - 单元格内的按钮将新视图推送到屏幕上

postgresql 函数 - 如何将新的 json 对象推送到 json 数组?

如何将新的 UICollectionViewController 推送到单元格单元格内的 navigationController

sh 如何将新的本地分支推送到远程Git存储库并跟踪它?

将新的键值对推送到 json