说到视图的生命周期通常都是指视图控制器的视图生命周期。在视图的声明周期中最主要的有8个方法,分别为loadView()、viewDidLoad()、viewWillAppear(_:)、viewWillLayoutSubviews()、viewDidLayoutSubviews()、viewDidAppear(_:)、viewWillDisappear(_:)、viewDidDisappear(_:),对于这几个方法的说明如表1-5所示。视图的生命周期的流程以及这些方法的调用时机如图1.29所示。swift
表1-5 方法介绍app
方法ide |
功能布局 |
loadView()spa |
载入视图,一般这一步不须要去干涉。.net |
viewDidLoad()code |
载入完成,能够进行自定义数据以及动态建立其余控件blog |
viewWillAppear(_:)教程 |
视图将出如今屏幕以前,立刻这个视图就会被展示在屏幕上了生命周期 |
viewWillLayoutSubviews() |
即将开始子视图位置布局 |
viewDidLayoutSubviews() |
用于通知视图的位置布局已经完成 |
viewDidAppear(_:) |
视图已在屏幕上渲染完成 |
viewWillDisappear(_:) |
视图即将消失 |
viewDidDisappear(_:) |
视图已经消失 |
图1.29 生命周期
注意:在图中给出了这些方法的调用顺序,固然须要注意这几个方法的调用是由iOS系统决定的,不须要读者本身调用。
【示例1-12:LifeCycle】如下将使用代码说明视图的生命周期中方法的执行顺序。具体的操做步骤以下:
(1)打开Main.storyboard文件,从视图库中拖动Button按钮控件到主视图中,将Button的标题改成“移除视图”。
(2)将Button按钮控件进行动做removeView的声明和关联。
(3)打开ViewController.swift文件,编写代码,经过输出语句查看视图生命周期中方法的顺序。代码以下:
import UIKit class ViewController: UIViewController { //载入完成 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. print("viewDidLoad") } //轻拍按钮,移除视图控制器的视图 @IBAction func removeView(_ sender: AnyObject) { view.removeFromSuperview() } //载入视图 override func loadView() { super.loadView() print("LoadView") } //视图将出如今屏幕以前 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(true) print("viewWillAppear") } //视图已在屏幕上渲染完成 override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(true) print("viewDidAppear") } //即将开始子视图位置布局 override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() print("viewWillLayoutSubviews") } //视图的位置布局已经完成 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() print("viewDidLayoutSubviews") } //视图即将消失 override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(true) print("viewWillDisappear") } //视图已经消失 override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(true) print("viewDidDisappear") } …… }
此时运行程序,会看到如图1.30所示的效果。不只如此,还会在应用程序输出窗口输出如下内容:
LoadView viewDidLoad viewWillAppear viewWillLayoutSubviews viewDidLayoutSubviews viewDidAppear
当开发者轻拍“移除视图”按钮后,会看到视图控制器的主视图被移除,如图1.31所示。不只如此,还会在应用程序输出窗口输出如下内容:
viewWillDisappear viewDidDisappear
图1.30 初始状态 图1.31 移除主视图
iOS10 UI教程视图的生命周期