UINavigationController堆栈堆叠其他UINavigationControllers的UITabBarControllers?

时间:2012-09-07 07:12:09

标签: ios uinavigationcontroller uitabbarcontroller uinavigationbar uitabbar

我读到在iOS应用程序中有这样的结构是不好的。但是,如果应用程序有很多UINavigationControllerUITabBarController s,该怎么办?但是只显示一个UINavigationBar和一个UITabBar?隐藏了其他UINavigationBarUITabBar

EDITED

例如,在基于导航的应用程序中,我调用此代码:

- (IBAction)openTabsController:(id)sender {        

    tabOneController *tabOneViewContr = [[[tabOneController alloc] initWithNibName:@"tabOneController" bundle:nil] autorelease];
    UINavigationController *tabOneNavContr = [[UINavigationController alloc] initWithRootViewController:tabOneViewContr];

    tabTwoController *tabTwoViewContr = [[[tabTwoController alloc] initWithNibName:@"tabTwoController" bundle:nil] autorelease];
    UINavigationController *tabTwoNavContr = [[UINavigationController alloc] initWithRootViewController:tabTwoViewContr];


    UITabBarController *tabContr = [[[UITabBarController alloc] init] autorelease];
    tabContr.viewControllers = [NSArray arrayWithObjects:tabOneNavContr,tabTwoNavContr, nil];
    sel.navigationController.navigationBar.hidden = YES;
    [self.navigationController pushViewController:tabContr animated:YES];
}

调用此方法后,我有两个UINavigationController和一个UITabBarController。同时,我在屏幕上有一个UINavigationBar和一个UITabBar

EDITED

近似方案。

enter image description here

从一开始我们就有了一个UINavigationController,它允许在视图(圆圈)之间导航。然后在推出UITabBar后,允许在视图之间切换。具有两个小rects的矩形是具有2个UITabBarItem的UITabBar的视图。当我们按下任何UITabBarItem时,会出现另一个UIView。在这个UIView中,我们可以按下一个按钮,该按钮用另一个UITabBar调用另一个视图。如果没有用另一个UITabBar隐藏,当前UITabBar在推送后是可见的。 现在更清楚了吗? 上面的代码几乎完美(除了一些动画,不包括Apple的限制)

2 个答案:

答案 0 :(得分:1)

Gargo,

我不确定我理解你的问题,但苹果文档很清楚。如果您使用- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated,则表示viewController

  

不能是标签栏控制器的实例,它必须不是   在导航堆栈上。

既然你做了

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

您正在推送导航堆栈中的标签栏控制器实例。

如果您添加了您可能实现的结构,我可以帮助您找到另一种解决方案。

希望有所帮助。

答案 1 :(得分:1)

应用程序在任何时候都应该只有一个工作的tabBarController。

tabBarController也应该是根视图控制器。总是。 (如果在tabBarController之前需要登录视图或类似内容,则删除登录视图,创建tabBarController,然后将其设为根目录。)

这是苹果公司工程师亲自向我提出的建议。

请记住,应用程序应该是快速且易于使用/导航的小型应用程序。如果您觉得需要多个tabBarController,那么从UI / Usability的角度来看,您的应用程序设计可能非常错误。