前言
前段时间,同事问我addChild和didMove函数的使用规则。我以为我能很好地解答出来,毕竟我经常使用这两个函数,然而临到我要说的时候,发现脑子里只有那简单的一两句话—“addChild负责添加到父视图上,成为父子视图控制器;didMove负责显示”。说完这话,我不知道同事满不满意,但我自己知道–我自己都不满意的,因为我讲的太简单,简单到连我自己都不明白。此时此刻,我想通了一个道理:我懂和教别人,是两码事。
基于这个尴尬,回来后,我认真复习了addChild和didMove相关资料,完善了我所理解的知识。下面把我所理解的整理出来。
大家都知道:做iOS开发,理解视图控制器之间的关系(特别是父子视图的关系),对构建健壮的应用程序非常重要。而addChild和didMove函数,就是一对处理父子视图关系的非常重要的组件。
addChild
func addChild(_ childController: UIViewController)
它用于将一个子视图控制器添加到父视图控制器上,当添加成功的时候,刚添加上的子视图控制器与父视图控制器就构成了父子关系的视图控制器,这样,子控制器就可以访问父控制器的一些方法了,或者使用父控制器的某些功能。
didMove
func didMove(toParent parent:UIViewController)
当调用addChild函数之后,使子视图和父视图成为父子视图关系,再调用didMove,说明控制器的父子视图调用成功了,并准备显示。
用一张图示来说明父子关系的视图
意义
作为父子关系的视图控制器,有什么意义呢?成为父子关系的视图控制器有以下的一些作用:
- 在【旋转屏幕】、【横竖屏切换】场景中非常有用。当父控制切换横屏时,子控制器也会跟随切换。
- 消息事件传递通畅了。我们知道iOS的运行时机制,基于对象的消息,会一级一级地向父类查询,并最终处理消息事件。
实际举例:
let childViewController = ChildViewController()
addChild(childViewController)
view.addSubview(childViewController.view)
childViewController.didMove(toParent: self)
上述代码就是把一个childViewController,添加到当前view,并做为父子关系的控制器。
注意:
1.在早期的版本中(iOS 13之前),使用addChildViewController来实现,而在iOS13之后就弃用了,现在都流行使用addChild。
2.想起之前写代码,都是直接写addSubview就可以了,很少加上addChild和didMove,是否那时候写得不规范呢?
以上就是对addChild和didMove的应用理解。
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/423469.html