你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS視圖控制器編程指南 --- 視圖控制器所扮演的角色

iOS視圖控制器編程指南 --- 視圖控制器所扮演的角色

編輯:IOS開發綜合

視圖控制器是應用程序內部結構的基礎,每個APP至少都有一個視圖控制器,實際情況中大多數APP都會有多個。視圖控制器管理用戶界面的一部分同時負責用戶界面和底層數據之間的交互。視圖控制器也使用戶界面不同部分之間的過渡更方便。

因為視圖控制器在APPs中扮演中如此重要的角色,所以視圖控制器基本上是你做任何事情完成任何功能的中心。類 UIViewController 定義了很多方法和屬性,用來管理你的視圖,事件處理,在不同視圖控制器之間的過渡,與應用程序其他部分之間的坐標位置。你可以繼承UIViewController或者它的任何一個子類,向你繼承的類中添加你需要用來實現你應用程序特性的自定義代碼。

 

視圖控制器中有兩個類型:

-內容視圖控制器 管理應用程序中的離散內容,是你創建的視圖控制器的主要類型。

-容器視圖控制器 在其他視圖控制器(被稱為子視圖控制器)之間收集信息,並且用一種有利於引導的方式來呈現信息或者呈現這些視圖控制器中的不同信息。

大多數APPs都是上述這兩種類型的混合類型。

 

視圖管理

視圖控制器扮演的最重要的角色是管理視圖之間的層次結構。每個視圖控制器都有一個唯一的根視圖,用來圍繞住視圖控制器的所有內容。在這個根視圖上可以添加你需要用來顯示你內容的視圖。圖1-1說明了視圖控制器和它的視圖之間的內在關系。視圖控制器總是有一個指向根視圖的引用,且每個視圖都有一個指向它的子視圖的強引用。

圖1-1 視圖控制器和它的視圖之間的關系

\

 

-注意:在實踐中常用outlets來訪問視圖控制器的視圖層次結構中的其它視圖。因為一個視圖控制器管理它的所有視圖的內容,outlets可以放置你需要存放的視圖的引用。當視圖從storyboard加載時,outlets可以自動連接實際的視圖對象。

一個內容視圖控制器管理它自己的所有視圖。一個容器視圖控制器管理它自己的所有視圖再加上來自它的一個或者多個子視圖控制器的根視圖。容器不管理容器內對象的內容,它僅僅管理根視圖,並且根據容器的設計來設置根視圖的大小和位置。圖1-2說明了split view controller 和它的子對象之間的關系。split view controller 管理它的子視圖的整體大小和位置,同時子視圖控制器管理這些視圖的實際內容。

圖1-2 試圖控制器可以管理其它試圖控制器的內容

\

Data Marshaling (Marshaling 不知該怎麼翻譯才好)

視圖控制器在它管理的視圖和應用程序的數據之間扮演一個中間角色。類UIViewController 的方法和屬性可以讓你管理應用程序的可視顯示。當你子類化UIViewController 時,你可以在字累中添加任何你需要用來管理你的數據的變量。添加的自定義變量創建了如圖1-3的關系,圖中視圖控制器有一個指向數據的引用,而視圖用來呈現視圖控制器指向的數據,同時你得負責視圖控制器所用到的數據在後台和視圖之間的交互和移動操作。

圖1-3 視圖控制器調解數據對象和視圖

\

你應該總是維持你的視圖控制器和數據對象之間是完全分離的狀態。為了確保你的數據結構的完整性,大多數邏輯屬於數據對象本身。視圖控制器可能會驗證來自視圖的輸入,然後將來自視圖的輸入打包成你的數據對象需要的格式來輸入,但是你應該最小化視圖控制器在管理實際數據時的作用。

UIDocument 對象時一種可以讓你的數據從視圖控制器中分離的方法,一個document對象是一種控制器對象,而且它知道怎樣讀取和寫入持久存儲的數據。當你子類化UIDocument時,你可以添加任何你需要的邏輯和方法用來提取數據,然後傳遞數據給一個視圖控制器或者時你應用程序的其它部分。視圖控制器可能會存儲它接收到的數據的一個備份,用來讓更新視圖更加容易,但是document對象仍然擁有真實的數據。

 

用戶交互

視圖控制器是一種responder objects,具有處理來自響應鏈事件的能力,盡管視圖控制器可以這樣做,但是視圖控制器很少直接處理touch事件。Instead,視圖通常處理它們自己的touch事件,然後把結果通知給與其關聯的delegate或者target object,當然這樣的delegate或者target object通常是該視圖所屬的視圖控制器。所以,一個視圖控制器中的大多數事件都是使用delegate methods 或者是action methods來處理。

 

資源管理

一個視圖控制器對它擁有的所有視圖和它所創建的所有對象負責。類 UIViewController 自動處理視圖管理的大多數方面。例如,UIKit 自動釋放不再需要的視圖相關聯資源。在你的UIViewController子類中, 你得負責管理你顯示創建的任何對象。

當系統中可用的內存正在迅速的減少時,UIKit 要求所有應用程序釋放它們已經不再使用的資源,處理這種問題的一個方法是在你的視圖控制器中調用didReceiveMemoryWarning方法,使用這個方法來移除你不在需要或者是之後可以很容易重新創建的引用對象。例如,你可能使用這個方法來移除緩存數據。當低內存情況出現時,在你的應用程序中盡可能多的釋放內存時很重要的。為了恢復內存,如果你的應用程序消耗了太多的內存的話,系統可能會直接終止你的應用程序。

 

自適應性

視圖控制器負責它們視圖的顯示,同時得根據底層的設備環境來調整匹配視圖的顯示。每個IOS app都應該能夠運行在iPad和一系列不同尺寸的iPhone上,而不是為每個設備提供不同的視圖控制器和視圖層次結構,使用單一的視圖控制器來調整它的視圖以適應空間需求的改變通常是更簡單的做法。

在IOS中,視圖控制器需要處理粗粒度(coarse-grained) 和細粒度(fine-grained)的改變。當一個視圖控制器的traits改變時粗粒度也發生了改變,traits是用來描述整體環境的屬性,比如顯示比例。兩個最重要的traits是視圖控制器的水平和垂直size classes,它們用來指示視圖控制器在被給予的范圍內有多少空間,你可以通過使用size class的改變來改變你放置視圖的方法,如圖1-4. 當水平size class 是regular時,視圖控制器可以充分利用額外的水平空間來組織它的內容。當水平size class時compact時,視圖控制器垂直組織它的內容。

圖1-4調整views以適應size class 的改變

\

在一個給定的size class內,在任何時候發生更細粒度大小的改變都是可能的。當用戶從肖像畫到風景畫旋轉iPhone時,size class可能不會改變,但是屏幕尺寸通常都會改變。當你使用自動布局時,UIKit自動調整視圖的大小和位置用來適應新的屏幕尺寸。視圖控制器可以根據需要做出額外的調整。

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved