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

總結(jié)
iOS中的View Controller作為MVC模式中的Controller, 可以類比Android中的Activity:
- view屬性返回頁面內(nèi)容.
- 有一些生命周期回調(diào).
- 有一些各種各樣的pattern為了讓它承擔(dān)的職責(zé)盡量得少.
(其實(shí)后端代碼提供API的第一層也叫Controller, 所以有沒有可能, 最開始設(shè)計(jì)UIKit的人是一個(gè)之前寫后端的?)
References
以上就是iOS開發(fā)學(xué)習(xí) ViewController使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于iOS開發(fā)ViewControlle使用的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
iOS列表上拉(平滑加載數(shù)據(jù))自動(dòng)加載數(shù)據(jù)的問題解決
這篇文章主要給大家介紹了關(guān)于iOS列表上拉(平滑加載數(shù)據(jù))自動(dòng)加載數(shù)據(jù)問題的相關(guān)資料,本文實(shí)現(xiàn)的效果很多app都用的這種效果,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-07-07
詳解iOS應(yīng)用開發(fā)中使用設(shè)計(jì)模式中的抽象工廠模式
這篇文章主要介紹了iOS應(yīng)用開發(fā)中使用設(shè)計(jì)模式中的抽象工廠模式,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-03-03
iOS使用runtime修改文本框(TextField)的占位文字顏色
相信大家都知道TextField默認(rèn)的占位顏色也是深灰色,這個(gè)顏色比較難看清,這篇文章給大家介紹如何使用runtime修改TextField文本框的占位文字顏色,有需要的可以參考借鑒.2016-09-09
詳解iOS開發(fā)中Keychain的相關(guān)使用
這篇文章主要介紹了iOS開發(fā)中Keychain的相關(guān)使用,文中列舉了一個(gè)使用Keychain來保存密碼的例子,需要的朋友可以參考下2015-10-10
iOS設(shè)計(jì)模式——Category簡單介紹
這篇文章主要介紹了iOS設(shè)計(jì)模式——Category簡單介紹,有興趣學(xué)習(xí)的同學(xué)可以了解一下。2016-11-11
iOS之Https自簽名證書認(rèn)證及數(shù)據(jù)請求的封裝原理
本篇文章主要介紹了iOS之Https自簽名證書認(rèn)證及數(shù)據(jù)請求的封裝原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
iOS Remote Notification遠(yuǎn)程消息推送處理
這篇文章主要為大家詳細(xì)介紹了iOS Remote Notification遠(yuǎn)程消息推送處理,感興趣的小伙伴們可以參考一下2016-09-09

