在一个容器中拥有超过一个控制器的最好方法是什么?

这是一个ViewController,它有一个容器视图。 请注意,容器只是整个屏幕的一部分,像往常一样。

在这里输入图像说明

所以容器的右侧包含VC。 例如,可以是显示零件清单的“零件”。

但是如果我说四个风险投资公司,我想把这个地方放在那个地方 (容器在哪里)。 也许:零件,轮胎,刹车,油。

当然,在这个区域,一次只能显示一个。

真正做到这一点的最好方法是什么?

在过去,我做了四个容器视图(位置和大小完全相同),只是提出了我想要的容器视图,并手动移除了其他三个视图。

这里有什么合适的解决scheme?

注 – 一个相关的问题的确, 一个容器视图实际上可以指向多个VC ? (这样你仍然可以“手动”交换,只需要一个而不是五个匹配的容器视图就简单多了。)

最后,这里是一个在www上find的相关文章…

http://sandmoose.com/post/35714028270/storyboards-with-custom-container-view-controllers

你有 – 如预期 – 几个选项。

选项1使用UIPageViewController。 您甚至可以在不同的子视图控制器之间滑动,只有在需要时才会加载它们。

您必须将UIPageViewControllerdataSource设置为至less实现以下两种方法的对象:

 #pragma mark - UIPageViewControllerDataSource - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { // Return the viewController instance _before_ the given viewController or nil when there are no more view controllers to display. return nil; } - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { // Return the viewController instance _after_ the given viewController or nil when there are no more view controllers to display. return nil; } 

选项2为您的容器视图创build一个sockets,然后以编程方式添加/删除要显示的子视图控制器,如下所示:

 - (void)setCurrentChildViewController:(UIViewController *)viewController { // Remove existing child if (self.currentChildViewController) { if (self.currentChildViewController.isViewLoaded) { [self.currentChildViewController.view removeFromSuperview]; } [self.currentChildViewController willMoveToParentViewController:nil]; [self.currentChildViewController removeFromParentViewController]; } // Now add viewController as child [self addChildViewController:viewController]; [viewController didMoveToParentViewController:self]; viewController.view.frame = self.containerView.bounds; viewController.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; [self beginAppearanceTransition:YES animated:NO]; [self.containerView addSubview:viewController.view]; [self endAppearanceTransition]; self.currentChildViewController = viewController; } 

选项3隐藏和显示您的问题中描述的子视图控制器,但我宁愿select选项1或2,根据您的需要。


初学者脚注:

使用Storyboard,当你加载一个UIViewController时,你经常需要使用instantiateViewControllerWithIdentifier: ,所以,一个简单的例子

 SomeViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"someViewControllerStoryboardID"]; // see method created in option 2 [self setCurrentChildViewController:vc]; 

我用一个包含scrollView的分段控件。

容器视图和分段控件是scrollView的子视图。 当我按下分段控件中的其中一个选项卡时,我使用了删除子视图控制器的两种方法,显示新的子视图控制器,然后重新计算新加载的子视图控制器所需的高度,并设置scrollView的自动布局高度约束到新的价值。