iOS ViewController
寫UIKit的代碼, ViewController是離不開的.
本文試圖講講它的基本知識, 不是很深入且有點雜亂, 供初級選手和跨技術堆疊同學參考.
What is a View Controller
iOS中的View Controller非常像Android中的Activity.
它負責用戶界面的展示, 有一些生命周期的回呼函式, 還和界面切換有關, 一個app中可以有一個或多個ViewController.
每一個ViewController都有一個single root view, 包含此ViewController的所有內容, 在頁面上的所有View都會被加入到以這個root view為根的樹形結構中去.
ViewController有一個view屬性, 代表最后回傳的頁面.
ViewController擁有所有的View, 管理和這些View相關的互動, 是離用戶最近的第一層代碼.
如何定義ViewController.
一般要繼承UIViewController.
如果你的頁面主要是tableview或者collectionview也可以繼承UITableViewController或
UICollectionViewController.
ViewController的型別
ViewController的型別有兩種:
- Content view controller: 管理一塊view的內容. (大多數的ViewController都是這一種.)
- Container view controller: 作為一個container, 管理其中的child view controllers.
把每個child view controller的root view顯示在container的view范圍內. 可以每次只展示一個child, 也可以多個同時展示. UIKit中的UINavigationController,UITabBarController,UISplitViewController,UIPageViewController都是這種型別, 它們多數是為了不同界面之間的導航服務的.
生命周期回呼
Controller的回呼中最常用的是:
loadView(): 用來設定根view屬性, add views等.viewDidLoad(), 可以用來做一些初始化的作業, 比如加載資料, add和remove views, 設定constraints等.
其他的回呼方法名字也非常直白:
- viewWillAppear(): view繪制之前.
- viewDidAppear(): view繪制出來了.
- viewWillDisappear(): view馬上要消失了.
- viewDidDisappear(): 已經消失了.
ViewController的職責
ViewController即MVC(Model View Controller)模式中的Controller.
如何管理View和資料的分離和互動是開發者自己的職責.
在簡單的demo里, 如果你愿意, 一個ViewController就可以寫完所有代碼.
和Android一樣, 我們會盡量把邏輯從ViewController(Activity)中拆分出去, 寫出更加職責分明并且容易被測驗的代碼.
會有一些流行的模式, 比如MVVM什么的, 這里不展開講了.
Scene, Window, ViewController
每一個Window都有一個root view controller, 是window最開始的內容.
展示一個新的view controller將會改變視窗內容.
它們之間的關系如圖:

圖片來源
總結
iOS中的View Controller作為MVC模式中的Controller, 可以類比Android中的Activity:
- view屬性回傳頁面內容.
- 有一些生命周期回呼.
- 有一些各種各樣的pattern為了讓它承擔的職責盡量得少.
(其實后端代碼提供API的第一層也叫Controller, 所以有沒有可能, 最開始設計UIKit的人是一個之前寫后端的?)
References
- ViewController Programming Guide for iOS
- Managing content in your app’s windows
- UIViewController
出處: 博客園: 圣騎士Wind
Github: https://github.com/mengdd
微信公眾號: 圣騎士Wind
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/513733.html
標籤:其他
