iPhone:几个视图的底部栏

时间:2012-02-10 07:35:31

标签: iphone window uitabbarcontroller

我想在视图中添加一个底栏,然后在浏览多个视图(每个视图都有一个nab栏)时将其保留在那里。我希望它会遵循Apple的指导方针(我已经知道只推荐使用nab bar)或至少接受了应用程序。 为此,我在应用程序窗口中添加了一个UIView。这个UIView包含一个UITabBarController,它包含每个条形项的导航控制器(每个作为rootviewController):

UIWindow *window=[[UIApplication sharedApplication] keyWindow];
MyUIViewController *mv=[[MyUIViewController alloc]init];
UINavigationController *navd = [[UINavigationController alloc] initWithRootViewController:mv];
navd.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"MyItem" image:[UIImage imageNamed:@"myImage.png"] tag:0];
NSMutableArray *controllers = [[NSMutableArray alloc] init];
[controllers addObject:navd];
UITabBarController *tbarController=[[UITabBarController alloc] init]; 
tbarController.viewControllers = controllers; 
tbarController.customizableViewControllers = controllers;
UIView *vistaBarraInferior=tbarController.view;
[window addSubview:vistaBarraInferior]; 
[window makeKeyAndVisible];

它可以工作,但是当我想用UITabBarController返回并退出ivies时,我的问题出现了。如果我写:

[self.tabBarController.view removeFromSuperview];
[self.parentViewController.navigationController popViewControllerAnimated:YES];

标签栏已从当前视图中删除,但我无法访问上一个视图(我在执行任何操作之前的根视图),因为我已使用'initWithRootViewController'覆盖它。

是否有其他方法可以让它变得更容易或使其成功?

提前致谢。

3 个答案:

答案 0 :(得分:1)

您应该使用带有导航控制器阵列的tabbarcontroller。例如,请参阅苹果示例代码here

我查看了您的代码,但在不同级别上看起来并不正确。例如,您正在调用initwithviewcontroller但是传递了uiview。这是不正确的。

答案 1 :(得分:1)

如果要组合标签栏和导航栏,必须使用标签栏作为根,并为每个标签项添加一个导航控制器。你不能以相反的方式做到这一点,因为标签栏必须始终是root。

我不确定你想用底栏实现什么。它是否应该用作标签栏或工具栏。请记住,如果使用选项卡栏,则每个选项卡将具有由导航控制器管理的自己的一组视图。另一方面,工具栏与一个视图相关。

如果你想创建像叠加工具栏这样的东西 - 即使它们是动画进出也总是在视图之上 - 你需要选择不同的解决方案。

例如,您可以创建自己的控制器,在底部显示您的工具栏,以及一些容器视图,哪些内容将由导航控制器管理。

答案 2 :(得分:0)

如果我以其他方式重写此代码:

        UITabBarController *tabBar=[[UITabBarController alloc]init];
        tabBar.title=@"MyTitle";
        NSMutableArray *items=[[NSMutableArray alloc]init];
        MyUIViewController *ld = [[MyUIViewController alloc] init];
        [tabBar addChildViewController:ld];            
        UITabBarItem *tabItem=[[UITabBarItem alloc]initWithTitle:@"Item1" image:[UIImage imageNamed:@"myImage.png"] tag:0];
        [items addObject:tabItem];
        [tabItem release];
        [tabBar setToolbarItems:items];
        [self.navigationController pushViewController:tabBar animated:YES];

结果是底部的标签栏为空。我是否忘记写任何其他内容来显示标签栏项目?

如果我添加第二个项目,则仅显示其标题,但不显示其图像或与第一个项目相关的任何内容。