childViewControllers的接口

时间:2014-11-21 16:11:38

标签: ios objective-c uiviewcontroller

我有我的ViewController和另外3个控制器,我想把它们放到我的ViewController中。

这是一个代码,我正在制作childViewControllers并添加它们。使用不同的颜色,看看我是否正确计算帧数。

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    EnterAndLogViewController *EALViewController = [[EnterAndLogViewController alloc]init];
    SentPacksViewController *SPViewController = [[SentPacksViewController alloc]init];
    RecievedPacksViewController *RPViewController = [[RecievedPacksViewController alloc]init];

    [self makeChildViewController:EALViewController];
    [self makeSizeOfEALViewController:EALViewController];

    [self makeChildViewController:SPViewController];
    [self makeSizeOfSPViewController:SPViewController];

    [self makeChildViewController:RPViewController];
    [self makeSizeOfRPViewController:RPViewController];




}

- (UIColor *)makeColor
{
    CGFloat hue = ( arc4random() % 256 / 256.0 );  //  0.0 to 1.0
    CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from white
    CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5;  //  0.5 to 1.0, away from black
    UIColor *color = [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];\
    return color;
}


- (void) makeChildViewController:(UIViewController *) controller
{
    [self addChildViewController:controller];
    [self.view addSubview:controller.view];
    [controller didMoveToParentViewController:self];

}

- (void) makeSizeOfEALViewController: (EnterAndLogViewController *) controller
{
    CGRect myFrame=CGRectMake(20.0f, 20.0f,self.view.bounds.size.width - 40.0f , (self.view.bounds.size.height - 40.0f)/2.0f);
    controller.view.frame = myFrame;
    //controller.view.backgroundColor = [self makeColor];
}

- (void)makeSizeOfSPViewController : (SentPacksViewController *) controller
{
    CGRect myFrame=CGRectMake(20.0f, (self.view.bounds.size.height - 40.0f)/2.0f +20 , (self.view.bounds.size.width- 40.0f)/2 , (self.view.bounds.size.height - 40.0f)/2.0f);
    controller.view.frame = myFrame;
    controller.view.backgroundColor = [self makeColor];

}

- (void) makeSizeOfRPViewController : (RecievedPacksViewController *) controller
{
    CGRect myFrame=CGRectMake(20.0f + (self.view.bounds.size.width- 40.0f)/2 , (self.view.bounds.size.height - 40.0f)/2.0f +20 , (self.view.bounds.size.width- 40.0f)/2 , (self.view.bounds.size.height - 40.0f)/2.0f);
    controller.view.frame = myFrame;
    controller.view.backgroundColor = [self makeColor];


}

在我的故事板中,我有一个控制器(ViewController)和另外三个我的ViewControllers。但是当我向这个控制器添加一些UI时,在我的主ViewController上它们并没有显示出来。

示例:我在故事板中为我的EnterAndLogViewController添加一个按钮,进行插座和操作,但是这个按钮不会显示在我的主ViewController中。

为什么呢?你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

不要使用alloc / init来创建视图控制器。如果这样做,视图控制器的视图将无法加载。如果在故事板中定义了视图控制器,请使用故事板方法instantiateViewControllerWithIdentifier:(您需要在故事板中的每个场景上设置唯一标识符。

代码可能如下所示:

EnterAndLogViewController *EALViewController = 
  [self.storyboard instantiateViewControllerWithIdentifier: @"EnterAndLogViewController"];

(假设您在IB中使用唯一标识符" EnterAndLogViewController")设置了视图控制器的场景。

然后,您可以将该视图控制器安装为子视图控制器。

请注意,对于iOS的最新版本,您可以在父视图控制器中设置容器视图,并链接一个" embed segue"自动为你做这件事。这样可以为您完成所有内务管理,并让您轻松定义子视图控制器的框架。