addChildViewController等方法

来源:互联网 发布:淘宝网推广方法 编辑:程序博客网 时间:2024/05/22 10:36

在以前,一个UIViewController的View可能有很多小的子view,用addSubview增加了大量的子view。这些子view大多数不会一直处于界面上,只是在某些情况下才会出现,虽然这些view很少出现,但是我们却常常一直把它们放在内存中。另外,当收到内存警告时,我们只能自己手工把这些view从super view中去掉。所以在iOS 5.0及以后,iOS为UIViewController类添加了新的属性和方法:

@property(nonatomic,readonly) NSArray *childViewControllers- (void)addChildViewController:(UIViewController *)childController- (void) removeFromParentViewController- (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion- (void)willMoveToParentViewController:(UIViewController *)parent- (void)didMoveToParentViewController:(UIViewController *)parent

一 - (void)addChildViewController:(UIViewController *)childController

//向父视图控制器容器中添加子视图控制器[父视图控制器 addChildViewController:子视图控制器];

当要添加的子视图控制器已经包含在视图控制器容器中,那么,相当于先从父视图控制器中删除,然后重新添加到父视图控制器中

二 - (void)removeFromParentViewController

//从父视图控制器中删除[子视图控制器 removeFromParentViewController];

三 -(void)transitionFromViewController:(UIViewController )fromViewController toViewController:(UIViewController )toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

//交换两个子视图控制器的位置(由于添加的顺序不同,所以子试图控制器在父视图控制器中存在层次关系)[ 父视图 transitionFromViewController: 当前显示的子试图控制器,将被替换为非显示状态                     toViewController:将要显示的子视图控制器                             options:动画的方式                                      animations:动画Block                           completion:完成后执行的Block]

四 - (void)willMoveToParentViewController:(UIViewController *)parent

//当一个视图控制器从视图控制器容器中被添加或者被删除之前,该方法被调用[要添加的或者别删除的子视图 willMoveToParentViewController:nil]

注意:
1.removeFromParentViewController 前要调用,且parent参数为nil
2.addChildViewController前,不用调用,以为系统在显示前自动调用
3.只需要在transitionFromViewController方法之前调用。

五- (void)didMoveToParentViewController:(UIViewController *)parent

//当从一个视图控制容器中添加或者移除viewController后,该方法被调用。[要添加的或者别删除的子视图 didMoveToParentViewController:父视图(或者没有父视图时nil) ]

注意:
1.removeFromParentViewController 后不用我们调用,因为系统删除子控制器后自动调用。
2.addChildViewController后,必须调用该方法。
3.只需要在transitionFromViewController方法后,调用。

例子

例子1 添加子视图控制器

 [父视图控制器 addChildViewController:子视图控制器]; 子视图控制器.view.frame = 任意frame(一般是父视图的frame);  [父视图控制器.view addSubview:子视图控制器.view];  [子视图控制器 didMoveToParentViewController:父视图控制器]; 

例子2 移除子视图控制器

 [子视图控制器 willMoveToParentViewController:nil];  [子视图控制器.view removeFromSuperview];  [子视图控制器 removeFromParentViewController]; 

参考
1.addChildViewController
2.willMoveToParentViewController和didMoveToParentViewController
3.Custom Container View Controller(这篇不错,可以仔细看看,可以自定义)
4 .iOS5中UIViewController的新方法(唐巧大神的杰作,有例子)

0 0
原创粉丝点击