IOS addChildViewController方法使用及注意事项
2017-05-11 14:00
615 查看
在iOS 5.0及以后,iOS为UIViewController类添加了新的属性和方法:
在使用这几个方法时,调用顺序很重要,使用代码如下:
[self addChildViewController:newController];
[self transitionFromViewController:oldController toViewController:newController duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations:nil completion:^(BOOL finished) {
if(finished){
[newController didMoveToParentViewController:self];
[oldController willMoveToParentViewController:nil];
[oldController removeFromParentViewController];
}else{
}
}];
这里最好使用一个viewcontroller表明当前哪一个控制器处于显示状态。
这里看看这几个方法的具体含义和注意事项:
在此,图控制器A添加了另一个图控制器B,那么A充当父视图控制器,B充当子视图控制器。父视图控制器充当了视图控制器容器的角色。
1、addChildViewController方法:
向视图控制器容器中添加子视图控制器
childController:子视图控制器
当要添加的子视图控制器已经包含在视图控制器容器中,那么,相当于先从父视图控制器中删除,然后重新添加到父视图控制器中。
2、removeFromParentViewController 方法
从父视图控制器中删除。
3、transitionFromViewController 方法
交换两个子视图控制器的位置(由于添加的顺序不同,所以子试图控制器在父视图控制器中存在层次关系)
fromViewController:当前显示的子试图控制器,将被替换为非显示状态
toViewController:将要显示的子视图控制器
duration:交换动画持续的时间,单位秒
options:动画的方式
animations:动画Block
completion:完成后执行的Block
4、willMoveToParentViewController 方法
当一个视图控制器从视图控制器容器中被添加或者被删除之前,该方法被调用parent:父视图控制器,如果没有父视图控制器,将为nil
注意点:
当我们向我们的视图控制器容器中调用removeFromParentViewController方法时,必须要先调用该方法,且parent参数为nil:
[将要删除的视图控制器 willMoveToParentViewController:nil];
当我们调用addChildViewController方法时,在添加子视图控制器之前将自动调用该方法。所以,就不需要我们显示调用了。
5、didMoveToParentViewController 方法
当从一个视图控制容器中添加或者移除viewController后,该方法被调用。
parent:父视图控制器,如果没有父视图控制器,将为nil
当我们向我们的视图控制器容器(就是父视图控制器,它调用addChildViewController方法加入子视图控制器,它就成为了视图控制器的容器)中添加(或者删除)子视图控制器后,必须调用该方法,告诉iOS,已经完成添加(或删除)子控制器的操作。
removeFromParentViewController 方法会自动调用了该方法,所以,删除子控制器后,不需要在显示的调用该方法了。
其实,这几个方法中的API说明,看的还懂。
1.这两个方法用在子试图控制器交换的时候调用!即调用transitionFromViewController 方法时,调用。
2.当调用willMoveToParentViewController方法或didMoveToParentViewController方法时,要注意他们的参数使用:
当某个子视图控制器将从父视图控制器中删除时,parent参数为nil。
即:[将被删除的子试图控制器 willMoveToParentViewController:nil];
当某个子试图控制器将加入到父视图控制器时,parent参数为父视图控制器。
即:[将被加入的子视图控制器 didMoveToParentViewController:父视图控制器];
3.无需调用[子视图控制器 willMoveToParentViewController:父视图控制器]方法。因为我们调用[父视图控制器 addChildViewController:子视图控制器]时,已经默认调用了。
只需要在transitionFromViewController方法后,调用[子视图控制器didMoveToParentViewController:父视图控制器];
4.无需调用[子视图控制器 didMoveToParentViewController:父视图控制器]方法。因为我们调用
[子视图控制器 removeFromParentViewController]时,已经默认调用了。
只需要在transitionFromViewController方法之前调用:[子视图控制器 willMoveToParentViewController:nil]。
[self addChildViewController:newController];
[self transitionFromViewController:oldController toViewController:newController duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations:nil completion:^(BOOL finished) {
if(finished){
[newController didMoveToParentViewController:self];
[oldController willMoveToParentViewController:nil];
[oldController removeFromParentViewController];
}else{
}
}];
这里最好使用一个viewcontroller表明当前哪一个控制器处于显示状态。
这里看看这几个方法的具体含义和注意事项:
一、[父视图控制器 addChildViewController:子视图控制器];
在此,图控制器A添加了另一个图控制器B,那么A充当父视图控制器,B充当子视图控制器。父视图控制器充当了视图控制器容器的角色。1、addChildViewController方法:
childController:子视图控制器
当要添加的子视图控制器已经包含在视图控制器容器中,那么,相当于先从父视图控制器中删除,然后重新添加到父视图控制器中。
2、removeFromParentViewController 方法
3、transitionFromViewController 方法
fromViewController:当前显示的子试图控制器,将被替换为非显示状态
toViewController:将要显示的子视图控制器
duration:交换动画持续的时间,单位秒
options:动画的方式
animations:动画Block
completion:完成后执行的Block
4、willMoveToParentViewController 方法
注意点:
当我们向我们的视图控制器容器中调用removeFromParentViewController方法时,必须要先调用该方法,且parent参数为nil:
[将要删除的视图控制器 willMoveToParentViewController:nil];
当我们调用addChildViewController方法时,在添加子视图控制器之前将自动调用该方法。所以,就不需要我们显示调用了。
5、didMoveToParentViewController 方法
parent:父视图控制器,如果没有父视图控制器,将为nil
当我们向我们的视图控制器容器(就是父视图控制器,它调用addChildViewController方法加入子视图控制器,它就成为了视图控制器的容器)中添加(或者删除)子视图控制器后,必须调用该方法,告诉iOS,已经完成添加(或删除)子控制器的操作。
removeFromParentViewController 方法会自动调用了该方法,所以,删除子控制器后,不需要在显示的调用该方法了。
其实,这几个方法中的API说明,看的还懂。
二、关于willMoveToParentViewController方法和didMoveToParentViewController方法的使用
1.这两个方法用在子试图控制器交换的时候调用!即调用transitionFromViewController 方法时,调用。2.当调用willMoveToParentViewController方法或didMoveToParentViewController方法时,要注意他们的参数使用:
当某个子视图控制器将从父视图控制器中删除时,parent参数为nil。
即:[将被删除的子试图控制器 willMoveToParentViewController:nil];
当某个子试图控制器将加入到父视图控制器时,parent参数为父视图控制器。
即:[将被加入的子视图控制器 didMoveToParentViewController:父视图控制器];
3.无需调用[子视图控制器 willMoveToParentViewController:父视图控制器]方法。因为我们调用[父视图控制器 addChildViewController:子视图控制器]时,已经默认调用了。
只需要在transitionFromViewController方法后,调用[子视图控制器didMoveToParentViewController:父视图控制器];
4.无需调用[子视图控制器 didMoveToParentViewController:父视图控制器]方法。因为我们调用
[子视图控制器 removeFromParentViewController]时,已经默认调用了。
只需要在transitionFromViewController方法之前调用:[子视图控制器 willMoveToParentViewController:nil]。
相关文章推荐
- IOS addChildViewController方法使用及注意事项
- iOS addChildViewController 使用
- iOS addChildViewController方法
- IOS addChildViewController方法学习
- iOS addChildViewController方法
- iOS addChildViewController方法
- UIScrollView的基本使用方法和注意事项 - iOS - UI基础知识总结10
- IOS中ViewController中的loadView方法使用注意
- iOS开发之使用addChildViewController:给控制器添加子控制器
- iPhone开发笔记(20)EGOImageView的使用方法及注意事项
- Flex addChild()方法注意事项
- iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)
- IOS研究之UITabBarController隐藏tabBar以及addChildViewController
- addChildViewController的使用
- IOS 表视图(UITableVIew)的使用方法(6)表视图的编辑功能(新增Add)
- iOS ARC使用时注意事项以及报错解决方法
- IOS笔记 : addChildViewController
- pushViewController/presentModalViewController/addSubView区别及使用方法
- addChildViewController方法
- iOS开发之transitionFromViewController方法的使用