以编程方式将两个视图控制器添加到两个容器视图

时间:2015-06-03 21:49:20

标签: ios objective-c uiviewcontroller

我有一个有两个容器的视图控制器。我有每个容器的视图控制器。这三个视图控制器位于不同的故事板中。如何以编程方式将两个视图控制器添加到两个容器中?

3 个答案:

答案 0 :(得分:0)

您可以通过

参考不同的故事板
[[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"secondVCSrorybradID"];

你应该给你想要创建标识符的VC。

而且你可以使用addSubview将其添加到任何框架中:

答案 1 :(得分:0)

首先,您需要获取故事板。为此,您应该使用UIStoryboard class

UIStoryboard *firstStoryboard  = [UIStoryboard storyboardWithName: @"FirstStoryboardName"  bundle: nil];
UIStoryboard *secondStoryboard = [UIStoryboard storyboardWithName: @"SecondStoryboardName" bundle: nil];
UIStoryboard *thirdStoryboard  = [UIStoryboard storyboardWithName: @"ThirdStoryboardName"  bundle: nil];

接下来,您需要从这些故事板中获取初始视图控制器(假设firstStoryboard的视图控制器包含这两个容器)

UIViewController *secondVC = (UIViewController *)[secondStoryboard instantiateInitialViewController];
UIViewController *thirdVC  = (UIViewController *)[thirdStoryboard  instantiateInitialViewController];

现在将这两个视图控制器添加到包含容器的视图控制器中的容器

UIViewController *firstVC = (UIViewController *)[firstStoryboard instantiateInitialViewController];
// TODO: Add secondVC and thirdVC as the children of firstVC 

答案 2 :(得分:0)

所以回答你关于将视图控制器添加到容器的问题...... 容器视图只是在带有segue的界面构建器中添加子视图控制器的简单方法。

因此,要以编程方式执行此操作,首先从每个相应的故事板中实例化视图控制器(请参阅Ch0k018的答案)。

然后,必须将属于容器视图的视图控制器作为子视图控制器添加到主视图控制器。您可以在此处阅读有关收容的信息https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html

// Add the child view as subview
childViewController.view.frame = self.containerView.bounds;
[self.containerView addSubview:childViewController.view];
// Need to call these methods to complete  
[self addChildViewController:tableViewController];
[childViewController didMoveToParentViewController:self];

来自Apple文档:

  

以下是代码的作用:

     

它调用容器的addChildViewController:方法来添加子项。调用addChildViewController:方法也会自动调用子进程的willMoveToParentViewController:方法。   它访问子视图属性以检索视图并将其添加到其自己的视图层次结构中。容器在添加视图之前设置子项的大小和位置;容器总是选择孩子的内容出现的位置。虽然此示例通过显式设置框架来执行此操作,但您也可以使用布局约束来确定视图的位置。   它显式调用子的didMoveToParentViewController:方法来表示操作已完成。