一、基礎概念
一.1、視圖控制器 (UIViewController及其子類)
概念
凡是繼承自UIViewController的對象,都叫做控制器,每一個控制器都會專門管理一個軟件界面
UIViewController 類或其子類的對象。每個視圖控制器都負責管理一個視圖層次結構,包括視圖層次結構中的視圖并處理相關用戶事件,以及將整個視圖層次結構添加到應用窗口。
作用
負責處理軟件界面的各種事件、負責軟件界面的創建和銷毀
類別
控制器分類.png
- UIViewController: 用于自定義視圖控制器的導航。例如對于兩個界面的跳轉,可以用一個UIViewController來控制另兩個UIViewController。
- UINavigationController:導航控制器,它與UITableViewController結合使用,能夠構建樹形結構導航模式
- UITabBarController: 標簽欄控制器,用于構建樹形標簽導航模式
- UISplitViewController:可以把屏幕分割成幾塊的視圖控制器,主要為iPad屏幕設計
- UIPopoverController:呈現氣泡風格視圖的控制器,主要為iPad屏幕設計。
- UIPageViewController:呈現電子書導航風格控制器
UISplitViewController和UIPopoverController是隨著iPad的出現而推出的,UIPageViewController則是用于構建電子書和移動雜志類應用。
阿敏說
視圖控制器是一個大的概念,類似與頁面。
比如我們在安卓或者web上說的跳頁面,或者跳Activity/Fragment,iOS就是推頁面,推控制器。
(一般管視圖控制器叫控制器)
一.2、視圖(UIView及其子類)
- 就是像按鈕(UIButton),文本(UILabel)和(圖片UIImageView)等之類的控件。
- iOS 10中所有的UIView都是視圖容器,所有的控件都繼承自UIView。
- 安卓,視圖分為視圖 View 和 ViewGroup,只有ViewGroup才是容器(ViewGroup繼承自View)
- iOS, 在storyboard里面,只有UIView這個控件能作為容器存放子控件,這點是缺陷和限制。如果使用代碼,那么比如UILabel這些控件也能作為容器存放子控件。(UIViewController和UIView沒繼承關系)
UIView繼承層次圖.png
注:理論上只有繼承自UIControl的類才能稱之為 控件 ,但是口頭上大多數人還是把所有繼承自UIView的類都稱之為 “控件”。
阿敏說
- 視圖,不過時候放在視圖控制器的控件罷了。
一.3、UIWindow
- UIWindow是一種特殊的UIView,通常在一個app中至少會有1個UIWindow,一般也僅有1個。
- iOS程序啟動完畢后,創建的第一個視圖控件就是UIWindow,接著創建UIViewController,最后將UIViewController的View添加到UIWindow上(這個添加UIViewController稱之為RootView,即根視圖控制器),于是UIViewController就顯示在屏幕上了。
- 一個iOS程序之所以能顯示在屏幕上,完全是因為它有UIWindow,也就是說,沒有UIWindow就看不到任何UI界面。
- 狀態欄和鍵盤都是特殊的UIWindow。