0

我读过在iOS应用程序中有这样的结构是不好的。但是如果应用程序有很多UINavigationController s和UITabBarController s怎么办?但一个UINavigationBar和一个UITabBar总是只显示?其他UINavigationBar s和UITabBar s被隐藏。UINavigationController堆栈UITabBarControllers堆栈其他UINavigationControllers?

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 S和一个UITabBarController。同时我在屏幕上有一个UINavigationBar和一个UITabBar

EDITED

近似方案。

enter image description here

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

+0

你应该发布一些代码或你的应用程序设计来理解你的问题。 – MaTTP

+0

这段代码是否足以理解? – Gargo

+0

构建这样的应用程序结构并不是我的想法。所以请不要downvote请 – Gargo

回答

1

Gargo,

我不知道我理解你的问题,但苹果的文档是明确的。如果你使用- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated它说,viewController

不能标签栏控制器的一个实例,它不能已经 导航堆栈上。

既然你做

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

您在导航堆栈内推标签栏控制器实例。

如果您添加结构,你会实现也许我可以帮助你找到另一种解决方案。

希望有所帮助。

+0

如果可能的话,你可以给我一个链接吗? – Gargo

+0

@Gargo我必须提供什么类型的链接?谢谢。 –

+0

一个链接你在哪里阅读这个?据我了解,所有的Apple文档都在线。 – Gargo

1

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

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

这是苹果公司的工程师给我的个人建议。

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

+0

正如我已经说过,这不是我的这种接口的想法。该应用程序看起来像它有一个工作的UITabBarController在任何时候,但它实现为一些UITabBarControllers – Gargo

+0

TabBarControllers应始终是根据Apple的根视图控制器。因此,你不能有多个“加载”。在你的场景中,TabBarControllers都不是root用户。只是隐藏它或早先在导航堆栈中放置它并不会削减它。 – ader