免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

[Android開(kāi)發(fā)學(xué)iOS系列] ViewController

iOS ViewController【[Android開(kāi)發(fā)學(xué)iOS系列] ViewController】寫(xiě)UIKit的代碼, ViewController是離不開(kāi)的.本文試圖講講它的基本知識(shí), 不是很深入且有點(diǎn)雜亂, 供初級(jí)選手和跨技術(shù)棧同學(xué)參考.
What is a View ControlleriOS中的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)容, 在頁(yè)面上的所有View都會(huì)被加入到以這個(gè)root view為根的樹(shù)形結(jié)構(gòu)中去.
ViewController有一個(gè)view屬性, 代表最后返回的頁(yè)面.
ViewController擁有所有的View, 管理和這些View相關(guān)的交互, 是離用戶最近的第一層代碼.
如何定義ViewController.一般要繼承UIViewController.
如果你的頁(yè)面主要是tableview或者collectionview也可以繼承UITableViewControllerUICollectionViewController.
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(): 用來(lái)設(shè)置根view屬性, add views等.
  • viewDidLoad(), 可以用來(lái)做一些初始化的工作, 比如加載數(shù)據(jù), add和remove views, 設(shè)置constraints等.
其他的回調(diào)方法名字也非常直白:
  • viewWillAppear(): view繪制之前.
  • viewDidAppear(): view繪制出來(lái)了.
  • viewWillDisappear(): view馬上要消失了.
  • viewDidDisappear(): 已經(jīng)消失了.
ViewController的職責(zé)ViewController即MVC(Model View Controller)模式中的Controller.
如何管理View和數(shù)據(jù)的分離和交互是開(kāi)發(fā)者自己的職責(zé).
在簡(jiǎn)單的demo里, 如果你愿意, 一個(gè)ViewController就可以寫(xiě)完所有代碼.
和Android一樣, 我們會(huì)盡量把邏輯從ViewController(Activity)中拆分出去, 寫(xiě)出更加職責(zé)分明并且容易被測(cè)試的代碼.
會(huì)有一些流行的模式, 比如MVVM什么的, 這里不展開(kāi)講了.
Scene, Window, ViewController每一個(gè)Window都有一個(gè)root view controller, 是window最開(kāi)始的內(nèi)容.
展示一個(gè)新的view controller將會(huì)改變窗口內(nèi)容.
它們之間的關(guān)系如圖:
[Android開(kāi)發(fā)學(xué)iOS系列] ViewController

文章插圖
圖片來(lái)源
總結(jié)iOS中的View Controller作為MVC模式中的Controller, 可以類比Android中的Activity:
  • view屬性返回頁(yè)面內(nèi)容.
  • 有一些生命周期回調(diào).
  • 有一些各種各樣的pattern為了讓它承擔(dān)的職責(zé)盡量得少.
(其實(shí)后端代碼提供API的第一層也叫Controller, 所以有沒(méi)有可能, 最開(kāi)始設(shè)計(jì)UIKit的人是一個(gè)之前寫(xiě)后端的?)
References
  • ViewController Programming Guide for iOS
  • Managing content in your app’s windows
  • UIViewController

    經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀