如何在UITabBarController内的UINavigationController内导航?

时间:2013-01-21 19:21:19

标签: ios objective-c uinavigationcontroller uitabbarcontroller

我有一个项目是一个标签栏控制器。每个选项卡通常都有一个UINavigationController。我的问题是:我需要一个带有很多导航的新选项卡(大约30个导航项目分组为4-8组。问题:我的导航栏已经满了(不能使用导航控制器(或栏)。我需要的是导航栏下方的导航栏(它有一个全局搜索栏和其他全局图标填充它)。我怎样才能实现这一点?

我现在拥有的:我在导航栏下创建了一个UIScrollView作为我的“手动”导航栏。这是一个scrollView,因为我不知道(向前)我将拥有多少个“分组”导航项目(目前只有4个)。这些组中的每一个都由一个UIButton表示,其中一些应该立即呈现一个视图,而另一些则使用其他导航项呈现一个弹出窗口,选中后将显示一个视图。

问题:我想在上面提到的导航视图下看一个“内容视图”,我可以根据用户的导航选项显示内容。我必须支持iOS 5.0,所以我不能使用storyboard容器视图(不幸的是)。我将提供3种类型(可能更晚)的内容视图,我想创建单独的视图控制器,然后在我提到的导航中选择适当的视图控制器。我可以使用第三方导航控制器吗?我必须“自己动手”吗?任何建议将不胜感激。

这是我需要实现的“共同拍摄”图片: enter image description here

1 个答案:

答案 0 :(得分:0)

我会将您正在调用内容视图的内容视为主视图的子视图,并将其用作添加childViewController视图的视图。如果你还没有读过自定义容器控制器,你应该这样做,但使用它们的基本方法是这样的。

您在问题中显示的视图的控制器将是自定义容器控制器。您可以在viewDidLoad方法中加载初始控制器,然后在子视图中切换控制器(我称之为self.containerView)以响应用户从滚动条中选择的内容:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    UIViewController *initial = [self.storyboard instantiateViewControllerWithIdentifier:@"InitialVC"];
    [self addChildViewController:initial];
    [initial.view.frame = self.containerView.bounds];
    [self.containerView addSubview:initial.view];
    self.currentController = initial;
}

-(void)switchToNewViewController:(UIViewController *) cont {
    [self addChildViewController:cont];
    cont.view.frame = self.containerView.bounds;
    [self moveToNewController:cont ];
}

-(void)moveToNewController:(UIViewController *) newController {
    [self.currentController willMoveToParentViewController:nil];
    [self transitionFromViewController:self.currentController toViewController:newController duration:.6 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{}
         completion:^(BOOL finished) {
             [self.currentController removeFromParentViewController];
             [newController didMoveToParentViewController:self];
             self.currentController = newController;
         }];
}

这应该给你基本的想法。我从我的一个测试项目中获取了这个,所以可能需要稍微调整一下。