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的新方法(唐巧大神的杰作,有例子)
- addChildViewController等方法
- addChildViewController等方法
- addChildViewController方法
- addChildViewController、removeFromParentViewController等语法
- IOS addChildViewController方法学习
- 控制器的 addChildViewController 方法
- iOS addChildViewController方法
- iOS addChildViewController方法
- iOS addChildViewController方法
- addChildViewController
- addChildViewController
- addChildViewController
- addChildViewController:
- addChildViewController
- addChildViewController
- addChildViewController
- addChildViewController
- addChildViewController
- RecyclerView+ImageLoader打造多选图库
- Fresco 源码分析(三) Fresco服务端处理(4) Producer处理体系的总结
- C++ 虚函数表解析
- Eclilpse导入maven项目,无法自动构建为java项目的问题
- C#中DllImport用法汇总
- addChildViewController等方法
- 打开MyEclipse10是时候提示:Could not create the view: An unexpected exception was thrown.
- ABAP ALV里日期类型的F4帮助
- 【哥德巴赫猜想】LightOJ Goldbach`s Conjecture 1259
- 【iOS程序启动与运转】- RunLoop转载
- 理解 Spring AOP的含义
- struts2开发流程
- python request版 极客学院爬虫V1
-