iOS10 UI教程视图的生命周期
说到视图的生命周期一般都是指视图控制器的视图生命周期。在视图的声明周期中最主要的有8个方法,分别为loadView()、viewDidLoad()、viewWillAppear(_:)、viewWillLayoutSubviews()、viewDidLayoutSubviews()、viewDidAppear(_:)、viewWillDisappear(_:)、viewDidDisappear(_:),对于这几个方法的说明如表1-5所示。视图的生命周期的流程以及这些方法的调用时机如图1.29所示。
表1-5 方法介绍
|
方法
|
功能
|
|
loadView()
|
载入视图,通常这一步不需要去干涉。
|
|
viewDidLoad()
|
载入完成,可以进行自定义数据以及动态创建其他控件
|
|
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")
-
}
-
……
-
}
-
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教程视图的生命周期
相关阅读:iOS10 UI教程视图的绘制与视图控制器和视图
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29597077/viewspace-2129272/
,如需转载,请注明出处,否则将追究法律责任。