在view被加载到内存之后,系统会调用视图控制器的viewDidLoad方法。在创建一个自定义的UIViewController的子类时,Xcode会为开发者创建好覆写的viewDidLoad方法,并且要注意一定要调用父类的viewDidLoad。在这个方法中,可以初始化一些自定义的视图,并添加到视图控制器的view上。在UIViewController的生命周期中,viewDidLoad只会调用一次。
视图控制器的view被添加到可视的视图层级并且还未配置过任何的展示动画之前,系统将会调用viewWillAppear(_:)方法。在该方法中,开发者可以对即将展示的view进行相应的操作,比如修改状态栏的样式或者方向。如果这个方法被调用,那么视图控制器的view一定会被显示在屏幕上。如果覆写了这个方法,一定要调用父类的viewWillAppear(_:)。在UIViewController的生命周期中,viewWillAppear(_:)将会被多次调用,开发者要注意在该方法中避免重复创建对象。
当视图控制器的view准备布局它的子视图或者view的bounds属性被改变时,系统将会调用viewWillLayoutSubviews方法。如果布局上使用了自动布局,在调用该方法时,视图的布局还未生效。如果想在视图布局变化之前执行一些代码,可以覆写该方法,该方法的系统实现中并没有做任何的操作,所以覆写时不必调用父类方法。在UIViewController的生命周期中,viewWillLayoutSubviews将会被多次调用,开发者要注意的是在该方法中执行改变布局的代码要谨慎。
当视图控制器的view的bounds属性发生变化并且view已经调整好它子视图的位置时,系统将会调用viewDidLayoutSubviews方法。要注意的是,这个方法被调用并不意味着子视图的所有布局就都被设置好了,事实上每个子视图都需要自己负责自己的布局。如果想在视图布局变化之后执行一些代码,可以覆写该方法,该方法的系统实现中并没有做任何的操作,所以覆写时不必调用父类方法。在UIViewController的生命周期中,viewDidLayoutSubviews将会被多次调用,要注意在该方法中执行改变布局的代码要谨慎。(www.xing528.com)
当视图控制器的view完成布局之后,view已经被展示时,viewDidAppear(_:)方法就被调用了。在该方法中,开发者可以执行代码去操作一些view被展示后才能执行的任务。如果覆写了这个方法,一定要调用父类的viewDidAppear(_:)。在UIViewController的生命周期中,viewDidAppear(_:)会被多次调用,开发者要注意在该方法中多次执行相同的任务会不会产生其他问题。
至此,读者应该已经了解了一个视图控制器从创建到加载视图,最终被展示在界面上的过程。图11.2.1是视图控制器的视图状态转移图,其中包括了下一小节要讲述的视图消失。读者可以结合刚才的知识点去看这张图,相信可以帮助你更好地理解视图控制器的生命周期。
图11.2.1 视图控制器的视图状态转移
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。