`
wangbing1015
  • 浏览: 2836 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于transitionFromViewController方法调用时需注意的问题

阅读更多
UIViewController 中的 willMoveToParentViewController和didMoveToParentViewController的使用
我的益达 我的益达 2014-01-13 19:04:13
关于这两个方法,也是IOS5之后才加上去的。

在iOS 5.0及以后,iOS为UIViewController类添加了新的属性和方法:
@property(nonatomic,readonly) NSArray *childViewControllers -
(void)addChildViewController:(UIViewController *)childController -
(void)removeFromParentViewController -
(void)transitionFromViewController:::::: -
(void)willMoveToParentViewController:(UIViewController *)parent -
(void)didMoveToParentViewController:(UIViewController *)parent
这样,就能够将一个页面中的UIViewController控制起来,而不是混乱的共用一个UIViewController,最重要的是,编程习惯的革命:降低了功能的耦合度!

这里看看这几个方法的使用:

一、[父视图控制器 addChildViewController:子视图控制器];

在此,图控制器A添加了另一个图控制器B,那么A充当父视图控制器,B充当子视图控制器。父视图控制器充当了视图控制器容器的角色。

1、addChildViewController方法:
- (void)addChildViewController:(UIViewController *)childController
向视图控制器容器中添加子视图控制器

childController:子视图控制器

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

2、removeFromParentViewController 方法
- (void)removeFromParentViewController
从父视图控制器中删除。

3、transitionFromViewController 方法
- (void)transitionFromViewController:(UIViewController
                                      *)fromViewController toViewController:(UIViewController
                                                                             *)toViewController duration:(NSTimeInterval)duration
                             options:(UIViewAnimationOptions)options animations:(void
                                                                                 (^)(void))animations completion:(void (^)(BOOL finished))completion
交换两个子视图控制器的位置(由于添加的顺序不同,所以子试图控制器在父视图控制器中存在层次关系)

fromViewController:当前显示的子试图控制器,将被替换为非显示状态

toViewController:将要显示的子视图控制器

duration:交换动画持续的时间,单位秒

options:动画的方式

animations:动画Block

completion:完成后执行的Block

4、willMoveToParentViewController 方法
- (void)willMoveToParentViewController:(UIViewController *)parent
当一个视图控制器从视图控制器容器中被添加或者被删除之前,该方法被调用parent:父视图控制器,如果没有父视图控制器,将为nil

注意点:

-
当我们向我们的视图控制器容器中调用removeFromParentViewController方法时,必须要先调用该方法,且parent参数为nil:

[将要删除的视图控制器 willMoveToParentViewController:nil];

- 当我们调用addChildViewController方法时,在添加子视图控制器之前将自动调用该方法。所以,就不需要我们显示调用了。

5、didMoveToParentViewController 方法
- (void)didMoveToParentViewController:(UIViewController *)parent
当从一个视图控制容器中添加或者移除viewController后,该方法被调用。

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]。

经过这几点说明,在一些视图切换的过程中,和视图的换位中,应该可以了解什么时候去调用对应的视图啦。
分享到:
评论

相关推荐

    addChildViewController transitionFromViewController nib storyboard

    http://blog.csdn.net/nagecomeontom/article/details/26848229

    Autolayout-budejie

    Autolayout 实现百思不得姐总结##精华模块切换子控制器,使用系统的切换方法实现把全部\视频\声音\图片\段子五个topic控制器添加为EssenceVc的子控制器,通过以下方法切换- (void)transitionFromViewController:...

    GAHomeDemo.zip

    - (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)...

    iOS开发中的ViewController转场切换效果实现简介

    在iOS7之前,View Controller的切换主要有4种: Push/Pop,...iOS5,调用- (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)to

    需要系数法负荷计算软件.zip

    需要系数法负荷计算软件

    kettle插件-MongoDB Delete2.0

    kettle 用于(按条件)删除MongoDB集合数据的插件。 只需要放入kettle 客户端安装目录的 plugins目录下,然后重启kettle客户端即可。

    建筑电气负荷计算小软件.zip

    建筑电气负荷计算小软件

    电线选型、线管选型小型计算软件.zip

    电线选型、线管选型小型计算软件

    有限网卡驱动包,直接上传下载就行

    啦啦啦啦

    Theano-0.8.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    临床信息.csv

    临床信息.csv

    Windows 命令行五子棋程序,用于向 STM32 移植Gobang.zip

    五子棋游戏想必大家都非常熟悉,游戏规则十分简单。游戏开始后,玩家在游戏设置中选择人机对战,则系统执黑棋,玩家自己执白棋。双方轮流下一棋,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【技术】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes

    现金收支月报表Excel图表.xlsx

    现金收支月报表Excel图表.xlsx

    接地电阻计算软件.zip

    接地电阻计算软件

    多人联机五子棋小游戏muti-Gomoku-master.zip

    五子棋游戏想必大家都非常熟悉,游戏规则十分简单。游戏开始后,玩家在游戏设置中选择人机对战,则系统执黑棋,玩家自己执白棋。双方轮流下一棋,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【技术】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes

    spring aop实现接口参数变更前后对比和日志记录

    spring aop实现接口参数变更前后对比和日志记录完整代码,拿到项目代码,只需要做数据库连接的修改即可运行起来使用,代码案例详细,真是可靠,代码原文地址:https://blog.csdn.net/zhangcongyi420/article/details/138748857?spm=1001.2014.3001.5501

    setuptools-58.5.1.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    控制台界面字符版五子棋,有AI,可人机对战,在dev-c++下编写Renju-AI.zip

    五子棋游戏想必大家都非常熟悉,游戏规则十分简单。游戏开始后,玩家在游戏设置中选择人机对战,则系统执黑棋,玩家自己执白棋。双方轮流下一棋,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【技术】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes

    母亲节祝福html源码.zip

    母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福html源码母亲节祝福

    二叉树遍历算法的应用hahhhahaha

    二叉树遍历算法的应用hahhhahaha

Global site tag (gtag.js) - Google Analytics