0

我有一个项目是一个标签栏控制器。每个标签通常都有一个UINavigationController。我遇到的问题是:我需要一个新的导航栏,其中包含大量导航(大约30个导航项目分组为4-8组)。问题:我的导航栏已满(不能使用导航控制器(或栏)。我需要的是在导航栏下面的导航栏(它有一个全局搜索栏和其他全局图标填充它)。我如何实现这个最好的?如何导航UITabBarController内的UINavigationController?

我现在有什么:我已经创建了一个UIScrollView,作为我的“手滚”导航栏,它是一个scrollView,因为我不知道(前进)导航项目有多少个“分组”(目前只有4个),每个组都由一个UIButton ,其中一些应该立即呈现一个视图,另一些则会展示带有更多导航项目的弹出窗口,当选择该视图时将呈现视图。

问题:我想要在上述导航视图下的“内容视图”,我可以根据用户的导航选项呈现内容。我必须支持iOS 5.0,所以我不能使用故事板容器视图(不幸的是)。我将介绍3种类型的内容视图(可能更多),我希望将其创建为单独的视图控制器,然后在我的导航栏中选择适当的视图控制器。有我可以使用的第三方导航控制器吗?我必须“自己滚动”吗?任何建议将不胜感激。

这里是什么,我需要,实现了“掌掴在一起”图片: enter image description here

+0

你可以添加你想要的图片吗? – LuisEspinoza

+0

好的。我打了一个耳光,贴在我的问题上。标签栏和导航栏已存在,我无法在该标签上使用顶部的导航栏进行导航。根据我手卷UIScrollBar中的导航选择,我将在内容视图中呈现一些内容。也许在一个网格样式布局中,也许在一个封面流程中,也许是一个Web视图。我将有不同的“模板”作为视图控制器来呈现它们自己的复杂视图层次结构。 – HackyStack

+0

你的问题没有清楚说明。我们对你的各种控制器知之甚少,无法判断你是否需要“自己推出”。如果继承'UIViewController's是“roll your own”,那么,是的,你必须这样做。 – Mundi

回答

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; 
     }]; 
} 

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

+0

我希望不必这样做,因为它有巨大的缺陷和影响,但看起来这是我唯一的选择。 – HackyStack

+0

@HackyStack,我没有真正注意到很多缺陷。我看到的问题有时与子视图的大小(和旋转)有关。通常,我现在使用布局约束,而不是直接设置框架,但两种方法都可以工作。 – rdelmar

相关问题