父子视图控制器

1.知识点一

// 通过addChildViewController添加的控制器都会存在于childViewControllers数组中
    [self addChildViewController:[[XMGOneViewController alloc] init]];
    [self addChildViewController:[[XMGTwoViewController alloc] init]];
    [self addChildViewController:[[XMGThreeViewController alloc] init]];
    
    // 将XMGOneViewController从childViewControllers数组中移除
    [self.childViewControllers[0] removeFromParentViewController];

/**
 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这2个控制器也应该为父子关系
[a.view addSubview:b.view];
[a addChildViewController:b];
或者
[a.view addSubview:otherView];
[otherView addSubbiew.b.view];
[a addChildViewController:b];
 */

父子控制器好处:当子视图存在于父视图上面时,屏幕旋转等系统信息会传达给父控制器,进而传达给子视图控制器;能在子视图控制器初始化以后保住子视图控制器的命;

2.父视图控制器视图添加子视图控制器视图时,应该注意:

    XMGOneViewController *one = [[XMGOneViewController alloc] init];
    one.view.frame = CGRectMake(20, 100, 100, 100);
    [self.view addSubview:one.view];
    [self addChildViewController:one];

有时子视图控制器的显示并不会按照我们想象的来显示,此时需要添加:

one.view.autoresizingMask = UIViewAutoresizingNone;

或者

self.view.autoresizesSubviews=NO;

3.willMoveToParentViewController 方法(子视图)

当在父视图控制器中执行:[self addChildViewController:[[XMGOneViewController alloc] init]];

子视图控制器会自动调用willMoveToParentViewController方法;子视图添加到父视图的时候,才会调用viewDidLoad;

当在父视图控制器中执行:[self.childViewControllers[0] removeFromParentViewController];

子视图控制器会自动调用didMoveToParentViewController方法;然后在dealloc;

posted @ 2016-04-12 17:51  潜意识  阅读(397)  评论(0编辑  收藏  举报