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;