当我在基于选项卡的应用程序中从一个控制器导航到另一个控制器时,tabBar 被隐藏

Posted

技术标签:

【中文标题】当我在基于选项卡的应用程序中从一个控制器导航到另一个控制器时,tabBar 被隐藏【英文标题】:tabBar gets hidden when I navigate from one controller to another in tabbased application 【发布时间】:2014-01-06 12:44:54 【问题描述】:

如何从基于选项卡的应用程序中导航任何控制器?我创建了一个导航视图控制器,并将 tabBarController 放入了导航控制器。

所以我的 rootViewController 是 navigationController。

当我从主视图屏幕导航到基于选项卡的应用程序中的下一个 viewController 时,它导航成功但 tabBar 被隐藏

【问题讨论】:

您在 tabbarcontroller 中有哪些标签,您尝试在哪个标签中推送? 这些不是 *Controllers 类型吗?它们不应该以大写字母开头吗? 不,我创建了自定义标签栏放置四个按钮 检查我的答案 100% @Vikram 您在使用情节提要吗?抱歉之前的回答我把其他问题搞砸了 【参考方案1】:

将导航控制器作为 TabBar 的 Viewcontrollers。将必要的视图控制器(例如 Home、Others)推送到导航控制器中。现在您可以在标签栏内获得导航

【讨论】:

先生,我试过了,它第一次工作........当我点击任何选项卡时,由于未捕获的异常'NSRangeException',我得到了 m 终止应用程序,原因:'*** -[NSMutableArray removeObjectsInRange:]: 范围 1, 2 超出范围 [0 .. 0]' 非常感谢您的支持......这对我来说真的很重要谢谢你谢谢你【参考方案2】:

您构建视图层次结构的方式似乎不正确。

请检查一下。

应该是这样的

 tabbarController 
        -> navigationController 
                   -> viewController

【讨论】:

请举个例子,我没有得到这个结构 好吧,你可以将你的rootViewController设置为tabbarcontroller,导航控制器将是tabbarcontroller的子级,其他视图控制器将是导航控制器的子级。 感谢您的回复,但实际上它正在工作,但是当我从第一个视图导航到另一个视图时,然后当我单击主页选项卡时,它正在显示 SecondView 管理员让我回答我的代码 非常感谢您的支持...这对我来说真的很重要谢谢你谢谢你谢谢你【参考方案3】:

根据您的问题,它显示正确。最初,当您尝试从导航推送另一个视图控制器时,您的导航控制器具有导航队列的tab bar controller on top。它会show another view controller(它会推到队列的顶部)这就是为什么,它会隐藏你的标签栏。(假设你将一个VC推到另一个VC,导航控制器never show first VC's part

我的建议: 您的标签栏控制器应该是根视图控制器,并且您必须将导航控制器作为标签栏控制器的子级。然后将您的 VC 推向其中。它会显示你的 tabbaritems。

你可以试试这个(根据你的版本)

LocationsVC * vc = [LocationsVC viewController];    
 UINavigationController * nav = [[UINavigationController alloc]initWithRootViewController:vc];
tabBarController.viewControllers = [NSArray arrayWithObjects:homeVC, nav,servicesVC,forumVC, nil];
self.window.rootViewController = tabBarController ;

然后以任何方法从 LocationVC.m 推送您的 secondVC,

-(void)pushToNextScreen

    SecondVC *secondVc = //creation;
    [self.navigationController pushViewController:secondVc animated:YES];

【讨论】:

【参考方案4】:

使用下面的等级制度,

TabbarController --> UINavigationController --> UiViewController

tabbarController.viewControllers = array of UINavigationController;

然后使用选定选项卡的推送方法(选定的导航控制器)从一个控制器导航到另一个控制器

【讨论】:

先生,我试过了,它第一次工作........当我点击任何选项卡时,由于未捕获的异常'NSRangeException',我得到了 m 终止应用程序,原因:'*** -[NSMutableArray removeObjectsInRange:]: 范围 1, 2 超出范围 [0 .. 0]' 请提供更多细节。当尝试删除大于数组计数的索引处的对象时,应用程序会出现此异常。 当我点击第一个标签时我有四个标签然后它发生了 在下面编写方法并在其中记录 tabbarController.viewcontrollers。 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController。还要检查第一个选项卡控制器的 viewwillappear 方法。可能是您正在从那里的某个数组中删除对象。 FirstVC * v1 = [[FirstVC alloc] initWithNibName:@"FirstVC" bundle:nil]; UINavigationController * nav1 = [[UINavigationController alloc]initWithRootViewController:v1]; SecondVC * v2 = [[SecondVC alloc]initWithNibName:@"SecondVC" bundle:nil];

以上是关于当我在基于选项卡的应用程序中从一个控制器导航到另一个控制器时,tabBar 被隐藏的主要内容,如果未能解决你的问题,请参考以下文章

如何在ios中从一个视图导航到另一个视图?

从 TabBarView Child 导航到另一个 Route(全屏)

我们如何在 GWT 中从一页导航到另一页

在 Splitview 中从一个 Detail View 控制器导航到另一个 Detail VC

推送到另一个选项卡的视图控制器

是否可以从标签栏控制器导航到另一个标签栏控制器?