美文网首页移动端开发
【转载】willMoveToParentViewControll

【转载】willMoveToParentViewControll

作者: 小白猿 | 来源:发表于2018-09-19 15:38 被阅读287次

本文系转载,原文地址
iOS 5.0 后UIViewController新增:willMoveToParentViewController和didMoveToParentViewController

在iOS 5.0以前,我们在一个UIViewController中这样组织相关的UIView

在以前,一个UIViewController的View可能有很多小的子view。这些子view很多时候被盖在最后,我们在最外层ViewController的viewDidLoad方法中,用addSubview增加了大量的子view。这些子view大多数不会一直处于界面上,只是在某些情况下才会出现,例如登陆失败的提示view,上传附件成功的提示view,网络失败的提示view等。但是虽然这些view很少出现,但是我们却常常一直把它们放在内存中。另外,当收到内存警告时,我们只能自己手工把这些view从super view中去掉。

在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

,最重要的是,编程习惯的革命:降低了功能的耦合度!

写这篇博客,仅仅是讲以上5个方法!仅此而已。因为当我在百度或者谷歌中,输入以上5个方法的名字后,查出来的,并没有告诉这5个方法起到如何的作用?如何使用?

所以,我仅仅是想从API角度来谈一谈,这5个方法。

废话不多说了!

先搞清楚一个今天提到的概念:

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

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

addChildViewController****方法:

  • (void)addChildViewController:(UIViewController *)childController

向视图控制器容器中添加子视图控制器

childController:子视图控制器

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

removeFromParentViewController ****方法

  • (void)removeFromParentViewController

从父视图控制器中删除。

transitionFromViewController ****方法

  • (void)transitionFromViewController:(UIViewController *)fromViewControllertoViewController:(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

willMoveToParentViewController ****方法

  • (void)willMoveToParentViewController:(UIViewController *)parent

当一个视图控制器从视图控制器容器中被添加或者被删除之前,该方法被调用

parent:父视图控制器,如果没有父视图控制器,将为nil

注意点:

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

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

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

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

</article>

相关文章

  • 【转载】willMoveToParentViewControll

    本文系转载,原文地址iOS 5.0 后UIViewController新增:willMoveToParentVie...

  • 转载转载!

    曾被电影《一代宗师》中的一句经典台词深深触动,就是“见自己,见天地,见众生”,这是一个武师成为一代宗师必经的三个阶...

  • 转载转载!

    校长没错,就应该随机听课。 试想一下:学生正在全神贯注听老师讲课,老师正在专心讲课,校长这时推门而进,肯定是影响了...

  • D80 转载转载转载!

    今天阅读了《教室里的正面管教》第4章——人民为什么那样做。 一个行为不良的学生,是一个丧失了信心的学生。当...

  • D88 转载转载转载!

    我在二类高中任教,学生基础差,领导管理经验不足,只想着怎么抓学生纪律,用班风评比压班主任,班主任只想着怎么不被扣分...

  • D101 转载转载转载!

    何老师: 近段时间,受新冠疫情影响,在学校组织下我们开始了线上教学,现将我所教数学学科授课及学习情况总结如下: 一...

  • D102 转载转载转载!

    截止目前,我们一共观察了42节数学课堂,统计了所有记录的数据之后,从整体上对比新、旧学习习惯的频次,看出旧学习习惯...

  • D104 转载转载转载!

    思辨性阅读,需要合理的课程设计与教学安排,需要合理的阅读规划与必要的思维引导。 思维具有目的性,真正的思维活动必须...

  • D110 转载转载转载!

    1.只有学习才能让自己觉得没有虚度光阴,刷视频以后只有空虚。不要因为寂寞空虚就放纵自己,每天学习充实自己的大脑,就...

  • D106 转载转载转载!

    昨天朋友问我:你这么瘦怎么跑得动马拉松? 我说:我是因为跑了马拉松才瘦的。(马拉松需要提前跑步训练) 曾经也有人问...

网友评论

    本文标题:【转载】willMoveToParentViewControll

    本文链接:https://www.haomeiwen.com/subject/phuinftx.html