在之前,一个UIViewController的View可能有不少小的子view。这些子view不少时候被盖在最后,咱们在最外层ViewController的viewDidLoad方法中,用addSubview增长了大量的子view。这些子view大多数不会一直处于界面上,只是在某些状况下才会出现,例如登录失败的提示view,上传附件成功的提示view,网络失败的提示view等。可是虽然这些view不多出现,可是咱们却经常一直把它们放在内存中。另外,当收到内存警告时,咱们只能本身手工把这些view从super view中去掉。 编程
@property(nonatomic,readonly) NSArray *childViewControllers 网络
- (void)addChildViewController:(UIViewController *)childController 动画
- (void) removeFromParentViewController atom
- (void)transitionFromViewController:::::: spa
- (void)willMoveToParentViewController:(UIViewController *)parent orm
- (void)didMoveToParentViewController:(UIViewController *)parent 内存
[父视图控制器 addChildViewController:子视图控制器]; ci
- (void)addChildViewController:(UIViewController *)childController rem
向视图控制器容器中添加子视图控制器 animation
childController:子视图控制器
当要添加的子视图控制器已经包含在视图控制器容器中,那么,至关于先从父视图控制器中删除,而后从新添加到父视图控制器中。
- (void)removeFromParentViewController
从父视图控制器中删除。
- (void)transitionFromViewController:(UIViewController *)fromViewControllertoViewController:(UIViewController *)toViewController duration:(NSTimeInterval)durationoptions:(UIViewAnimationOptions)options animations:(void (^)(void))animationscompletion:(void (^)(BOOL finished))completion
交换两个子视图控制器的位置(因为添加的顺序不一样,因此子试图控制器在父视图控制器中存在层次关系)
fromViewController:当前显示的子试图控制器,将被替换为非显示状态
toViewController:将要显示的子视图控制器
duration:交换动画持续的时间,单位秒
options:动画的方式
animations:动画Block
completion:完成后执行的Block
- (void)willMoveToParentViewController:(UIViewController *)parent
当一个视图控制器从视图控制器容器中被添加或者被删除以前,该方法被调用
parent:父视图控制器,若是没有父视图控制器,将为nil
注意点:
1.当咱们向咱们的视图控制器容器中调用removeFromParentViewController方法时,必需要先调用该方法,且parent参数为nil:
[将要删除的视图控制器 willMoveToParentViewController:nil];
2.当咱们调用addChildViewController方法时,在添加子视图控制器以前将自动调用该方法。因此,就不须要咱们显示调用了。
- (void)didMoveToParentViewController:(UIViewController *)parent
当从一个视图控制容器中添加或者移除viewController后,该方法被调用。
parent:父视图控制器,若是没有父视图控制器,将为nil
当咱们向咱们的视图控制器容器(就是父视图控制器,它调用addChildViewController方法加入子视图控制器,它就成为了视图控制器的容器)中添加(或者删除)子视图控制器后,必须调用该方法,告诉iOS,已经完成添加(或删除)子控制器的操做。
removeFromParentViewController 方法会自动调用了该方法,因此,删除子控制器后,不须要在显示的调用该方法了。