addChildViewController等方法

在以前,一个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的新方法(唐巧大神的杰作,有例子)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值