“`html
Swift UIView Life Cycle 生命週期
Swift 生命週期 (Life Cycle) 是指當一個 ViewController 即將出現時所經歷的先後順序。這個過程就像用餐的順序一樣,通常是前菜 > 主餐 > 甜點。在 Swift 中,這些階段對於管理 UI 及其行為至關重要。
Swift 生命週期方法解析
- viewDidLoad:
當視圖被載入到記憶體後,但畫面未被顯示之前,會執行viewDidLoad
。這是進行視圖初始化的理想位置,通常會在這裡設置 UI 元件的初始狀態。 - viewWillAppear:
當視圖將要出現在畫面上且動畫尚未開始時,會呼叫viewWillAppear
。這裡適合執行與視圖顯示前的準備工作,例如更新 UI 或檢查狀態。 - viewDidAppear:
在viewWillAppear
結束後,此方法被呼叫。可以在這裡開始與用戶的互動,例如啟動動畫或記錄事件。 - viewWillDisappear:
在視圖將被移除且動畫開始前呼叫viewWillDisappear
。可以在這裡保存狀態或結束與視圖相關的任務。 - viewDidDisappear:
當視圖已經消失後會呼叫此方法。在這裡可以進行清理工作,例如釋放資源。
實作範例
以下是一個簡單的 ViewController
實作示例,展示了生命週期方法的使用:
override func viewDidLoad() {
super.viewDidLoad()
print("View has loaded")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("View will appear")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("View did appear")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
print("View will disappear")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("View did disappear")
}
Present (卡片模式) 生命週期
使用 present
方法進行視圖轉換的生命週期:
@IBAction func jumpButtonPress(_ sender: Any) {
let vc = TestViewController()
self.present(vc, animated: true, completion: nil)
}
打印輸出
A viewDidLoad
A viewWillAppear
A viewDidAppear
// -> 點擊跳轉
B viewDidLoad
B viewWillAppear
B viewDidAppear
A viewDidDisappear
Present (全螢幕模式) 生命週期
當 present
設置為全螢幕模式,生命週期的順序會有所不同:
let vc = Test1ViewController()
vc.modalPresentationStyle = .fullScreen
self.present(vc, animated: true, completion: nil)
打印輸出
A viewDidLoad
A viewWillAppear
A viewDidAppear
// -> 點擊跳轉
B viewDidLoad
A viewWillDisappear
B viewWillAppear
B viewDidAppear
A viewDidDisappear
UINavigationController Push 生命週期
使用 UINavigationController
進行頁面跳轉的生命週期:
@IBAction func jumpButtonPress(_ sender: Any) {
let vc = Test1ViewController()
self.navigationController?.pushViewController(vc, animated: true)
}
打印輸出
A viewDidLoad
A viewWillAppear
A viewDidAppear
// -> 點擊跳轉
B viewDidLoad
A viewWillDisappear
B viewWillAppear
B viewDidAppear
A viewDidDisappear
present vs push 的差異
- present: 等待 B 的
viewDidAppear
後才會觸發 A 的viewDidDisappear
- push: 先觸發 A 的
viewDidDisappear
後才會觸發 B 的viewDidAppear
常見問題解答
Q1: Swift 生命週期為什麼重要?
Swift 生命週期幫助開發者管理 UI 元件的狀態與行為,確保應用程式的流暢性與穩定性。
Q2: 如何在生命週期中處理資料?
在 viewDidLoad
中加載資料,並在 viewWillAppear
中更新 UI,這樣確保在視圖顯示前資料已正確配置。
Q3: 是否可以自定義生命週期方法?
不可以,但可以在標準生命週期方法中添加自定義邏輯以滿足您的需求。
“`
—