#iOS開發之UI篇#iOS開發之UI篇
#常用控件介紹1##
#UI第09天:滾動視圖#
##UIScrollView入門##
移動設備的屏幕?小是極其有限的,因此直接展?在?戶眼前的內容也相當有限,當展?的內容較多超出一個屏幕時,用戶可通過滾動操作來查看屏幕以外的內容,普通的UIView不具備滾動功能,不能顯?過多的內容。UIScrollView是一個能夠滾動的視圖控件,可以?用來展?大量的內容,并且可以通過滾動查看所有的內容。
UIScollView的常用屬性和方法:
- contentOffset屬性:UIScrollView滾動的位置
- contentSize屬性:UIScrollView內容的尺?寸(相當于滾動的范圍)
- bounces屬性:設置UIScrollView是否需要彈簧效果
- alwaysBounceVertical屬性:設置垂直方向是否有彈簧效果(必須在bounces設置為YES的前提下設置才有效)
- alwaysBounceHorizontal屬性:設置水平方向是否有彈簧效果(必須在bounces設置為YES的前提下設置才有效)
- pagingEnabled屬性:設置UIScrollView的滾動方式是否為翻頁效果
- scrollEnabled屬性:設置UIScrollView是否能滾動
- showsHorizontalScrollIndicator屬性:是否顯示水平方向的滑動條
- showsVerticalScrollIndicator屬性:是否顯示垂直方向的滑動條
- scrollIndicatorInsets屬性:設置滾動條的位置,可以通過UIEdgeInsetsMake函數來指定該位置
- indicatorStyle屬性:設置滾動條的風格,有三個可選項:UIScrollViewIndicatorStyleDefault(灰)、UIScrollViewIndicatorStyleBlack(黑)、UIScrollViewIndicatorStyleWhite(白)
- decelerationRate屬性:減速的速率
- scrollsToTop屬性:設置點擊狀態欄是否滑動到scrollView的頂部
- -setContentOffset:animated:方法:設置scrollView的位置
- -scrollRectToVisible:animated:方法:將指定的區域滾動到可視范圍之內,如果該地區已經在可視區域,則什么都不做。
UITextView退出鍵盤幾種方式:
1. 如果應用有導航條的,可以在導航條上面加多一個Done的按鈕,用來退出鍵盤,當然要先實UITextViewDelegate
2. 如果UITextView中不使用回車鍵,可以把回車鍵當做退出鍵盤的響應鍵
3. 自定義其他加載鍵盤上面用來退出,比如在彈出的鍵盤上面加一個view來放置退出鍵盤的Done按鈕
4. 點擊其他區域收起鍵盤
UITextView相當于是高級版本的UILabel和UITextField的合體。
UITextView的常用屬性:
-? editable屬性:設置UITextView能否編輯,如果不編輯就當做UILabel顯示,可以設置自動識別電話號碼、地址、郵箱,該屬性默認為YES
-? dataDetectorTypes屬性:設置UITextView是否支持識別電話號碼、地址、郵箱等內容
-? inputView:當UITextView成為第一響應者時顯示的輸入視圖
-? inputAccessoryView:當UITextView成為第一響應者時顯示的輸入輔助視圖,在inputView的上方
下面的例子演示了如何使用UITextView以及如何進行數據偵測和拼寫檢查。
###事件概述###
事件是當用戶手指觸擊屏幕及在屏幕上移動時,系統將事件按照特定的路徑傳遞給可以對其進行處理的對象。在iOS中,一個UITouch對象表示一個觸摸,一個UIEvent對象表示一個事件。事件對象中包含與當前多點觸摸序列相對應的所有觸摸對象,還可以提供與特定視圖或窗口相關聯的觸摸對象。
響應者對象是可以響應事件并對其進行處理的對象。UIResponder是所有響應者對象的基類,它不僅為事件處理,而且也為常見的響應者行為定義編程接口。UIApplication、UIView和所有從UIView派生出來的UIKit類(包括UIWindow)都直接或間接地繼承自UIResponder類。第一響應者是應用程序中當前負責接收觸摸事件的響應者對象(通常是一個UIView對象)。UIWindow對象以消息的形式將事件發送給第一響應者,使其有機會首先處理事件。如果第一響應者沒有進行處理,系統就將事件(通過消息)傳遞給響應者鏈中的下一個響應者,看看它是否可以進行處理。
試著點擊屏幕上圈出來的幾個區域,看看會發生什么并解釋為什么。

###響應者鏈處理原則###
1. 點擊檢測視圖或者第一響應者傳遞事件或動作消息給它的視圖控制器(如果它有的話);如果沒有一個視圖控制器,就傳遞給它的父視圖。
2. 如果一個視圖或者它的視圖控制器不能處理這個事件或動作消息,它將傳遞給該視圖的父視圖。
3. 在這個視圖層次中的每個后續的父視圖遵循上述的模式,如果它不能處理這個事件或動作消息的話。
4. 最頂層的視圖如果不能處理這個事件或動作消息,就傳遞給UIWindow對象來處理。
5. 如果UIWindow 對象不能處理,就傳給單件應用程序對象UIApplication。
6. 如果應用程序對象也不能處理這個事件或動作消息,將拋棄它。
##iOS中的手勢操作##
手勢操作是通過使用者的手指觸控,計算手指移動軌跡、坐標,然后對程序做相應處理的過程。手勢操作需要添加手勢識別器,所有手勢識別器公共的父類是UIGestureRecognizer。
###各種手勢的使用###
- 點擊手勢:UITapGestureRecognizer
- 長按手勢:UILongPressGestureRecognizer
- 旋轉手勢:UIRotationGestureRecognizer
- 捏合手勢:UIPinchGestureRecognizer
- 滑動手勢:UISwipeGestureRecognizer
- 拖動手勢:UIPanGestureRecognizer
###事件的分發機制###
**問題:**當有多個重疊的UIView時,誰是第一響應者
1. 默認的點擊順序是按照UIView中subviews的逆順序
2. 如果UIView的同級別subviews中有重疊的部分,則優先檢查頂部的subview,如果頂部的subview返回nil,再檢查底部的subview。
###事件的分類###
1. Touch Events(多點觸摸事件)
- touchesBegan:withEvent:方法:一個或多個手指置于視圖或窗口上
- touchesMoved:withEvent:方法:一個或多個手指在移動
- touchesEnded:withEvent:方法:一個或多個手指離開視圖或窗口
- touchesCancelled:withEvent:方法:如果其他系統事件(如內存不足警告)使得觸摸被取消
2. Motion Events(運動事件)
- motionBegan:withEvent:方法:運動事件開始
- motionEnded:withEvent:方法:運動事件結束
- motionCancelled:withEvent:方法:運動事件取消
>**說明:**如果要搖一搖之類的應用,就可以使用運動事件進行處理,代碼如下所示。
###UISegmentControl###

###UISlider###

###UISwitch###

###UIActivityIndicatorView###

###UIProgressView###

###UIStepper###

###UIDatePicker###

##常用控件介紹2##
###UIWebView和JavaScript調用###
UIWebView用于在App中嵌入網頁內容,通常情況下是html格式的網頁,也支持pdf文檔等其他格式(這取決于瀏覽器內核,手機上的瀏覽器內核通常為WebKit)。
##UIToolbar##
每個導航控制器,還配備了工具條(44坐標高),默認隱藏,可以通過將導航視圖控制器的toolBarHidden屬性設置為NO使其顯示。工具條屬于UINavigationController,一個導航控制器,只有一個工具條。工具條上的toolBarItem屬于每個視圖控制器,每個視圖控制器可以單獨定制工具條上的每個項。
###顯示UINavigationController自帶的UIToolbar###
- toolBarHidden屬性:設置為NO可以顯示自帶的工具條
###創建導航控制器###
- -initWithRootViewController::在創建導航控制器時指定根視圖控制器
- -initWithNavigationBarClass:toobarClass::用指定的導航條創建導航視圖控制器
###控制器的入棧和出棧###
- -pushViewController:animated:方法:將一個視圖控制器壓入棧中
- -popViewControllerAnimated:方法:從棧中彈出一個視圖控制器
- -popToRootViewControllerAnimated:方法:從棧中直接彈出根視圖控制器
- -popToViewController:animated:方法:從棧中彈出指定的視圖控制器

可以通過UINavigationController的viewControllers屬性獲得其棧中保存的所有視圖控制器;topViewController可以獲得棧頂的視圖控制器。
##UINavigationBar##
一個導航視圖控制器通常是由以下幾個部分構成的:

###導航條半透明以及相關坐標計算###
導航視圖控制器會維持一個導航條(UINavigationBar),這個導航條被所有的視圖控制器共享,可以通過UINavigationController對象navigationBar屬性獲得導航條,再通過下面的屬性設置其半透明效果,注意對導航條的設置將對所有的視圖控制器生效。
- translucent屬性:設置導航條是否半透明,默認值是YES。對此屬性的設置會影響到坐標的計算,因為導航條有44點的高度。例如在視圖控制控制器中放置一個按鈕,其frame屬性的第二個參數設置為100,那么在設置半透明為YES和NO的情況下按鈕的呈現效果如下圖所示。可以看出設置半透明后的按鈕坐標計算是以窗口頂端為參考系的,而不透明的時候按鈕坐標是相對于導航條的,相差了44個點。
??
###設置背景圖片###
- -setBackgroundImage:forBarMetrics:
- -setBackgroundImage:forBarPosition:barMetrics:
>**說明:**UIBarPostion和UIBarMetrics都是枚舉類型,前者表示導航欄的位置;后者表示導航欄的外觀。前者可能的取值包括:UIBarPositionAny(不指定位置)、UIBarPositionBottom(位于視圖底部)、UIBarPositionTop(位于視圖頂部)和UIBarPositionTopAttached(位于屏幕頂部同時也在其視圖的頂部);后者可能的取值包括:UIBarMetricsDefault(設備默認的外觀)、UIBarMetricsCompact(手機尺寸的外觀)等。
###隱藏和顯示導航條###
- navigationBarHidden屬性:是否隱藏導航控制欄
##UINavigationItem##
通過視圖控制器的navigationItem屬性可以獲得和視圖控制器對應的導航欄項,該屬性是只讀的,但是通過它的子屬性可以對UINavigationItem進行定制。可以定制的內容包括:
- leftBarButtonItem/leftBarButtonItems屬性:定制左側導航項
- rightBarButtonItem/rightBarButtonItems屬性:定制右側導航項
- backBarButtonItem屬性:定制返回項
- title屬性:導航項的標題
- prompt屬性:導航項的提示
- titleView屬性:導航項標題視圖,該屬性可以是任意UIView及其子類型,因此可以在此隨意定制自己想要的東西
>**說明:**由于navigationItem是每個視圖持有自己的navigationItem,因此可以為每個視圖定制不同的導航項。
如果當前視圖控制器通過navigationItem設置了leftBarButtonItem,則顯示當前視圖控制器設置好的leftBarButtonItem;如果當前視圖控制器沒有設置leftBarButtonItem,且當前視圖控制器不是根視圖控制器,顯示上一層的backBarButtonItem;如果上一層沒有指定backBarButtonItem,系統將根據上一層視圖控制器的標題自動生成一個返回按鈕;如果當前視圖控制器沒有設置leftBarButtonItem且當前視圖控制器是根視圖控制器,則左邊不顯示任何東西。
如果當前視圖控制器通過navigationItem屬性定制了titleView,那么將會顯示自定義的titleView,titleView的高度不應該超過導航條的高度;如果當前視圖控制器沒有定制titleView,系統會根據當前視圖控制器的標題或者navigationItem的標題創建一個UILabel來顯示此標題;navigationItem的標題優于視圖控制器的標題。
>**強調:**UINavigationController本身并不顯示無需定制,UINavigationBar屬于導航控制器(子對象),它使被多個視圖共享的,當你切換視圖控制器時,導航欄并沒有切換,如果需要定制導航視圖控制器就需要定制導航欄以及導航欄上的項目UINavigationItem。我們可以讓每個視圖控制器都有自己的UINavigationItem,并按照自己的意愿來創建它。
#UITextField控件##
###UITextFiled常用屬性和方法###
UITextField是常用的文本輸入控件,比如我們用的QQ的登錄界面,詞典輸入要查詢的單詞都使用了文本框控件,如下圖所示。之前介紹的UILabel可以在界面中顯示文本,但用戶無法選擇或編輯UILabel中的文本,想接受用戶輸入文本,就可以使用UITextField控件。當我們在用戶界面上點擊文本框時,屏幕底部會彈出鍵盤,用于向文本框中輸入文字。
- borderStyle屬性:邊框樣式(UITextBorderStyleNone, UITextBorderStyleBezel, UITextBorderStyleLine, UITextBorderStyleRoundedRect)
- background屬性:背景圖
- backgroundColor屬性:背景色
- placeHolder屬性:沒有輸入內容時的占位符
- text屬性:文字
- textColor屬性:文字顏色
- textAligment屬性:對齊方式
- font屬性:字體
- enabled屬性:是否可編輯
- secureTextEntry屬性:是否使用掩碼
- adjustsFontSizeToFitWidth屬性:是否調整字體大小適應寬度
- leftView / leftViewMode屬性:左視圖(可以定制文本框)/ 左視圖模式
- rightView / rightViewMode屬性:右視圖(可以定制文本框,可能會覆蓋掉清除文字的按鈕)/ 右視圖模式
- inputView / inputAccessoryView屬性:輸入/輔助視圖(可以完成鍵盤的定制,可以在原始的鍵盤上設置二級鍵盤)
- -becomeFirstResponder方法:成為第一響應者
- -resignFirstResponder方法:放棄第一響應者
#CALayer##
###UIView和CALayer的關系###
UIView和CALayer是相互依賴的關系,UIView依賴與CALayer提供的內容,CALayer依賴UIView提供的容器來顯示繪制的內容。CALayer基于圖像管理內容并允許你在這些內容上創建動畫。如果沒有CALayer,UIView自身也不會存在,UIView是一個特殊的CALayer實現,添加了響應事件的能力。一言以蔽之,UIView來自CALayer,高于CALayer,是CALayer高層實現與封裝;UIView的很多特性都源于CALayer對它的支持。
###通過CALayer改變UIView的形狀###
- borderColor屬性:邊框顏色。
- borderWidth屬性:邊框寬度。
- cornerRadius屬性:邊框轉角半徑(實現圓角效果)。
###通過CALayer添加動畫效果###
- transforms屬性:指定對CALayer中的內容做怎樣的變換,支持3D效果和動畫。
##UIImageView的使用##
UIImageView對象提供了一個基于視圖的容器來展示一張或者一系列圖像,同時也支持以動畫的方式來呈現一組圖像(可以指定播放間隔和頻率)。簡單的說,UIImageView就是UIImage對象的承載者,當需要將UIImage呈現在UIView上時就需要UIImageView。二者的關系就像UILabel和NSString之間的關系。
###UIImageView的創建和使用###
- - initWithImage:方法:這種方式適合創建小圖片,尤其是素材類圖片。
###UIImageView的常用屬性和方法##
- contentMode屬性:圖片的填充模式。(繼承自UIView)
- clipsToBounds屬性:修剪超出邊界的部分。(繼承自UIView)
- animationImages屬性:裝在用于動畫的圖像的數組。
- animationDuration屬性:動畫播放的持續時間。
- animationRepeatCount屬性:動畫的重復次數,0表示循環播放。
- - startAnimating方法:開始播放動畫。
- - stopAnimating方法:停止播放動畫。
- - isAnimating方法:返回BOOL值表示動畫是否正在播放中。
#UIView的基本屬性和方法
與UIView外觀相關的屬性:
之前我們說過,UIView可以代表屏幕上的一塊矩形區域,它負責內容的顯示、定位以及響應用戶的觸摸事件,是用戶和應用進行交互的主要方式,我們再來看看UIView的屬性和方法。
繪制和更新視圖的方法
- -drawRect:方法:繪圖(可以使用貝塞爾曲線進行繪圖)
- -setNeedsDisplay方法:讓整個視圖重繪
- -setNeedsDisplayInRect:方法:讓視圖指定的矩形區域重繪
管理手勢操作的方法
- -addGestureRecognizer:方法:添加手勢識別器
- -removeGestureRecognizer:方法:刪除手勢識別器
使用Block語法設置動畫的類方法
- +animateWithDuration:animations:類方法:用指定的持續時間完成通過Block指定的動畫
為視圖添加動畫效果的類方法
- + beginAnimations:context:類方法:開始一個動畫
- + commitAnimations類方法:執行動畫
- + setAnimationStartDate:類方法:設置動畫開始時間
- + setAnimationDuration:類方法:設置動畫持續時間
- + setAnimationDelay:類方法:設置延遲多少時間播放動畫
- + setAnimationRepeatCount:類方法:設置動畫重復播放次數
- + setAnimationRepeatAutoreverses:類方法:設置是否反向執行動畫
- + setAnimationTransition:forView:cache:類方法:設置動畫的執行效果以及作用于哪個視圖
- backgroundColor:背景顏色
- hidden屬性:是否隱藏
- alpha屬性:透明程度
- opaque屬性:是否不透明
- clipsToBounds:是否剪裁超出邊界的部分
- layer屬性:渲染視圖的CA層
設置視圖尺寸位置的屬性:
- frame屬性:視圖相對于窗口的坐標和尺寸
- bounds屬性:視圖相對于自己坐標和尺寸
- center屬性:視圖的中心點
管理視圖層次結構的屬性和方法:
- window屬性:視圖所在的窗口對象
- superview屬性:當前視圖的父視圖
- subviews屬性:視圖的直接子視圖
- addSubview:方法:添加子視圖
- removeFromSuperview:方法:將視圖從父視圖中移除
- bringSubviewToFront:方法:將指定的子視圖移到層次的頂層
- sendSubviewToBack:方法:將指定的子視圖放回到層次的底層
- insertSubview:atIndex:方法:在指定的層次位置插入子視圖
- insertSubview:aboveSubview:方法:在指定的視圖層上面添加子視圖
- insertSubview:belowSubview:方法:在指定的視圖層下面添加子視圖
- exchangeSubviewAtIndex:withSubviewAtIndex:方法:交換兩個子視圖的層次
- isDescendantOfView:方法:判斷一個視圖是不是另一個視圖的子視圖
配置視圖大小改變時行為的屬性和方法:
- autoresizingMask屬性:當父視圖改變大小時子視圖如何改變
- autoresizesSubviews屬性:是否自動調整子視圖大小
- contentMode屬性:視圖大小改變時如何呈現其內容
- sizeToFit方法:調整視圖大小以適應其子視圖
>**說明:**當父視圖的尺寸發生變化時,子視圖應該發生怎樣的變化可以通過子視圖在父視圖中的停靠模式來進行設置,對應的屬性叫做autoresizingMask,它可能的取值包括 UIViewAutoresizingNone、UIViewAutoresizingFlexibleLeftMargin、UIViewAutoresizingFlexibleWidth、UIViewAutoresizingFlexibleRightMargin、UIViewAutoresizingFlexibleTopMargin、UIViewAutoresizingFlexibleHeight、UIViewAutoresizingFlexibleBottomMargin。如果希望同時滿足多個值可以通過按位或運算來實現。
#UILabel的常用屬性
- text屬性:標簽上的文字
- textColor屬性:文字的顏色
- textAlignment屬性:文字的對齊方式
- font屬性:字體
- lineBreakMode屬性:指定如何換行及截斷標簽上的文字
- enabled屬性:是否允許繪制標簽上的文字
和文字大小相關的屬性:
- adjustsFontSizeToFitWidth屬性:調整文字大小適應標簽寬度
- adjustsLetterSpacingToFitWidth屬性:調整字符間距來適應文字寬度
- numberOfLines屬性:顯示的行數,設置成0表示不限制行數
- minimumScaleFactor屬性:最小的伸縮因子
- minimumFontSize屬性:最小字體大小
和陰影效果相關的屬性:
- shadowColor屬性:陰影顏色
- shadowOffset屬性:陰影偏移量
#創建和使用UIButton對象
**buttonWithType**:類方法,在創建按鈕時指定按鈕的類型。(iOS 7開始取消了圓角矩形按鈕類型,但是仍然可以通過其他方式做出圓角矩形的按鈕,因為很多時候按鈕都是以圖片的形態呈現,有了這個圓角矩形反而不方便定制)
###UIButton常用屬性和方法###
配置按鈕標題的屬性和方法:
- titleLabel屬性:按鈕標題的標簽
- titleForState:方法:指定狀態下的按鈕標題
- setTitle:forState:方法:設置指定狀態下按鈕的標題
- titleColorForState:方法:指定狀態下的按鈕標題顏色
- setTitleColor:forState:方法:設置指定狀態下按鈕標題的顏色
- setTitleShadowColor:forState:方法:設置指定狀態下按鈕標題陰影的顏色
配置按鈕顯示的方法:
- backgroundImageForState:方法:獲得指定狀態下的背景圖
- setBackgroundImage:forState:方法:設置指定狀態下的背景圖
- imageForState:方法:獲得指定狀態下的按鈕圖片
- setImage:forState:方法:設置指定狀態下的按鈕圖片
配置邊距的屬性:
- contentEdgeInsets屬性:內容的邊距
- titleEdgeInsets屬性:標題的邊距
- imageEdgeInsets屬性:圖片的邊距
獲取按鈕當前狀態的屬性:
- buttonType屬性:可能的取值包括UIButtonTypeCustom、UIButtonTypeSystem、UIButtonTypeDetailDisclosure、UIButtonTypeInfoLight、UIButtonTypeInfoDark、UIButtonTypeContactAdd、UIButtonTypeRounedRect(過時)。
- currentTitle屬性:按鈕上當前顯示的標題
- currentTitleColor屬性:當前標題顏色
- currentImage屬性:按鈕上當前顯示的圖片
- currentBackgroundImage屬性:按鈕上當前顯示的背景圖片
- imageView屬性:按鈕上的圖片視圖
繼承自UIControl的屬性和方法:
- addTarget:action:forControlEvents:方法:將為事件添加的消息接受者和對應的動作加入事件派發表,簡而言之就是為控件綁定事件處理的回調方法
- removeTarget:action:forControlEvents:方法:與上面方法的作用相反
- enabled屬性:控件是啟動還是禁用
- state屬性:控件所處的狀態
##UIButton的常用事件和狀態
我們先說一下UIControl的所有可能的事件。
事件類型|說明
:--|:--
UIControlEventTouchDown|單點觸摸按下事件,用戶點觸屏幕,或者又有新手指落下的時候
UIControlEventTouchDownRepeat|多點觸摸按下事件,點觸計數大于1:用戶按下第二、三、或第四根手指的時候
UIControlEventTouchDragInside|當一次觸摸在控件窗口內拖動時
UIControlEventTouchDragOutside|當一次觸摸在控件窗口之外拖動時
UIControlEventTouchDragEnter|當一次觸摸從控件窗口之外拖動到內部時
UIControlEventTouchDragExit|當一次觸摸從控件窗口內部拖動到外部時
UIControlEventTouchUpInside|所有在控件之內觸摸抬起事件
UIControlEventTouchUpOutside|所有在控件之外觸摸抬起事件(點觸必須開始與控件內部才會發送通知)
UIControlEventTouchCancel|所有觸摸取消事件,即一次觸摸因為放上了太多手指而被取消,或者被上鎖或者電話呼叫打斷
UIControlEventValueChanged|當控件的值發生改變時,發送通知。用于滑塊、分段控件、以及其他取值的控件。你可以配置滑塊控件何時發送通知,在滑塊被放下時發送,或者在被拖動時發送
UIControlEventEditingDidBegin|當文本控件中開始編輯時發送通知
UIControlEventEditingChanged|當文本控件中的文本被改變時發送通知
UIControlEventEditingDidEnd|當文本控件中編輯結束時發送通知
UIControlEventEditingDidOnExit|當文本控件內通過按下回車鍵(或等價行為)結束編輯時,發送通知
UIControlEventAlltouchEvents|通知所有觸摸事件
UIControlEventAllEditingEvents|通知所有關于文本編輯的事件
UIControlEventAllEvents|通知所有事件
對于UIButton來說,可能絕大多數處理的都是UIControlEventTouchUpInside事件,簡單的說就是按鈕點擊的事件。
#UIImage對象的屬性
- **size**屬性:圖像的大小,得到一個CGSize結構體,其中包括了寬度(width)和高度(height)。
###繪制圖像###
- **drawAtPoint:**方法:從指定的左上角坐標處繪制圖像。
- **drawInRect:**方法:在指定的矩形區域內繪制整個圖像。
##UIViewController入門##
###概念和作用###
UIViewController可以管理一屏的內容,如果說UIWindow是一副畫的畫框,那么UIViewController就是畫框中植入的一張畫布。我們并不建議將所有的視圖對象或子視圖都直接置于UIWindow對象中,因為UIWindow對象是唯一的,如果要想改變用戶界面就會非常的麻煩。如果使用UIViewController來管理用戶界面的話,在切換用戶界面時只需要更換一個視圖控制器就可以了。
它定義了一系列和生命周期相關的方法。下面的圖展示了UIViewController的生命周期,詳細的內容我們在后續的課程中跟大家分享。
視圖控制器加載:

視圖控制器收到內存警告:

###如何將UIViewController和UIWindow關聯###
我們可以創建一個視圖控制器并將第一個例子中在UIWindow上放置的按鈕和標簽放到視圖控制器中,再通過UIWindow對象的rootViewController屬性將視圖控制器設置為窗體對象的根視圖控制器,代碼如下所示