目錄:
UIView“家族” 應用界面的構建層次 視圖分類 最後
在Cocoa和Cocoa Touch框架中,“根”類時NSObject類。同樣,在UIKit框架中,也存在一個神奇的類——UIView。
從繼承關系上看,UIView是所有視圖的根,我們形象地稱其為“始祖”。
本篇,咱們就一起研究UIView的神奇所在。
UIView“家族”大體分為“控件”和“視圖”兩類,二者均繼承於UIView。
UIView類的繼承層次如圖:
UIControl類是控件類,其子類有UIButton、UITextField和UISilder等。之所以稱它們為“控件類”,是因為它們都有能力響應一些高級事件。
為了查看這些事件,我們可以在Interface Builder中拖拽一個UIButton控件到設計界面,然後選中這個Button,單擊右上角的按鈕,打開連接檢查器,如圖:
其中Sent Events欄中的內容就是UIButton相對應的高級事件。UIControl類以外的視圖沒有這些高級事件,這可以借助HelloWorld工程中的Label控件驗證一下。
選中UILabel控件,打開連接檢查器,如圖,可以發現UILabel的連接檢查器中沒有Sent Events欄,即沒有高級事件,不可以響應高級事件。
事實上,視圖也可以響應事件,但這些事件比較低級,需要開發人員自己處理。很多手勢的開發都以這些低級事件為基礎。
iOS應用界面是由若干個視圖構建而成的,這些視圖對象采用樹形構建。
如圖所示是一個應用界面的構建層次圖:
該應用又一個UIWindow,其中包含一個UIView根視圖。
根視圖下又有三個子視圖:Button1、Button2和UIView(View2),其中子視圖UIView(View2)中存在一個按鈕Button3。
一般情況下,應用中智包含一個UIWindow。從視圖構建層次上講,UIWindow包含了一個根視圖UIView。
根視圖一般也只有一個,放於UIWindow中。根視圖的類型決定了應用程序的類型。
上圖中各對象之間的關系如下:
應用界面的構建層次是一種樹形結構,UIWindow是“樹根”,根視圖是“樹干”,其它對象為樹冠。在層次結構中,上下兩個視圖是“父子關系”。
除了UIWindow,每個視圖的父視圖有且只有一個,子視圖可以有多個。
它們之間的關系設計三個屬性,如下:
下面簡要介紹這三個屬性的含義:
為了便於開發,蘋果將UIKit框架中的視圖分成以下幾個類別:
注意:
我們以後會遇到很多視圖(如UILabel、文本視圖和進度條等)並未繼承UIControl類,但我們也習慣稱為“控件”,這是開發中約定俗稱的一種常用歸類方式,與嚴格意義上的概念性分類有差別。
沒有結尾總覺得哪裡怪怪的。。😄