在iOS5中,ViewController中新添加了下面几个方法:
addChildViewController:是UIViewController的一个方法,iOS5之后加入的,使用这个方法可以达到addsubView一样的效果,而且好处多多。
addChildViewController的好处:
1. 无疑,对页面中的逻辑更加分明了。相应的View对应相应的ViewController。 2. 当某个子View没有显示时,将不会被Load,减少了内存的使用。 3. 当内存紧张时,没有Load的View将被首先释放,优化了程序的内存释放机制。
API函数
- (void)addChildViewController:(UIViewController *)childController NS_AVAILABLE_IOS(5_0); - (void)removeFromParentViewController NS_AVAILABLE_IOS(5_0); /** * 着重介绍一下它 * transitionFromViewController:toViewController:duration:options:animations:completion: * fromViewController 当前显示在父视图控制器中的子视图控制器 * toViewController 将要显示的姿势图控制器 * duration 动画时间(这个属性,old friend 了 O(∩_∩)O) * options 动画效果(渐变,从下往上等等,具体查看API) * animations 转换过程中得动画 * completion 转换完成 */ - (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^ __nullable)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(5_0); - (void)willMoveToParentViewController:(nullable UIViewController *)parent NS_AVAILABLE_IOS(5_0); - (void)didMoveToParentViewController:(nullable UIViewController *)parent NS_AVAILABLE_IOS(5_0);
使用方法
(1)添加
/* * (1)调整 childViewController View Frame大小 * [父控制器.view addsubview:子控制器.view]; * (2)[父控制器 addChildViewController:子控制器]; * (3)[子控制器 didMoveToParentViewController:self]; */ UIViewController *controller = (UIViewController *)(_controllers[i]); controller.view.frame = CGRectMake( 0, 0,self.view.bounds.size.width,self.view.frame.size.height - 64.0f); [self addChildViewController:controller]; [self.view addSubview:controller.view]; [controller didMoveToParentViewController:self];
(2)移除子控制器
[sfViewControllr willMoveToParentViewController:nil]; [sfViewControllr removeFromParentViewController]; [sfViewControllr.view removeFromSuperview];
(3)可能遇到的问题:
如果在子Controller中,把自己从父Controller中移除,在ios6中没问题,在iOS7中,会崩溃
[self willMoveToParentViewController:nil]; [self.view removeFromSuperview]; [self removeFromParentViewController]; //ios7中崩溃
暂时的解决方法,在子Controller中发通知,通知父Controller,移除子Controller
IOS 添加子控制器
最新推荐文章于 2022-04-15 16:58:04 发布