說到視圖的生命週期通常都是指視圖控制器的視圖生命週期。在視圖的聲明週期中最主要的有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教程視圖的生命週期