iOS —— 視圖,視圖控制器和窗口

一、基礎概念

一.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。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容