視圖控制器是iOS中運行應(yīng)用的一個重要工具精耐,使用UIKit可以很容易創(chuàng)建復(fù)雜的接口而不用編寫大量的代碼。當(dāng)實現(xiàn)你自己的視圖控制器蝙茶,使用下面的建議和指南來確保你不會做干擾系統(tǒng)期望的行為扣唱。
盡量使用系統(tǒng)提供的視圖控制器
許多iOS框架定義可以在應(yīng)用中使用的視圖控制器。使用這些系統(tǒng)提供的視圖控制器可以為你節(jié)省時間唐瀑,確保一致的用戶體驗群凶。
大多數(shù)系統(tǒng)視圖控制器為特定任務(wù)而設(shè)計的。一些視圖控制器可以訪問用戶數(shù)據(jù)例如聯(lián)系人哄辣。其他視圖控制器可以訪問硬件或提供特殊界面來管理媒體请梢。例如赠尾,UIKit中的UIImagePickerController類顯示一個標(biāo)準接口,用于捕獲圖片和適配并訪問用戶的相機毅弧。
在你創(chuàng)建自定義視圖控制器之前气嫁,查看現(xiàn)有框架看看是否存在一個視圖控制器可以完成你想要執(zhí)行的任務(wù)。
·UIKit框架提供了視圖控制器來顯示警告够坐、拍照和拍適配寸宵,管理iCloud中的文件。UIKit也定義了許多標(biāo)準容日視圖控制器元咙,你可以使用它們在組織你的內(nèi)容邓馒。
·GameKit框架提供視圖控制器用于管理玩家、排行榜蛾坯、成就和其他游戲功能光酣。
·地址簿UI框架提供視圖控制器用于顯示和選擇聯(lián)系信息。
·MediaPlayer框架提供視圖控制器用于顯示和管理視頻及從用戶庫中選擇媒體資源脉课。
·EventKit UI框架提供視圖控制器用于顯示和編輯用戶的日歷數(shù)據(jù)救军。
·GLKit框架提供視圖控制器用于管理OpenGL渲染界面。
·Multipeer連接框架提供視圖控制器用于檢測其他用戶并邀請他們連接倘零。
·Message UI框架提供視圖控制器用于組成電子郵件和短信唱遭。
·PassKit框架提供視圖控制器用于顯示pass及添加pass到Passbook。
·Social框架提供視圖控制器用于為Twitter呈驶、Facebook和其他社交媒體網(wǎng)站構(gòu)成消息拷泽。
·AVFoundation框架提供視圖控制器用于顯示媒體資源。
重要:不要修改系統(tǒng)提供的視圖控制器的視圖層級袖瞻。每個視圖控制器有自己的視圖層級并自己負責(zé)維護層次結(jié)構(gòu)的完整性司致。更改視圖層級結(jié)構(gòu)可能引入bug到你的代碼并阻止視圖控制器的正確操作。在系統(tǒng)視圖控制器的情況下聋迎,要依靠公開的方法和屬性修改視圖控制器脂矫。
更多關(guān)于使用特殊視圖控制器的信息,參見相應(yīng)的框架文檔霉晕。
讓每個視圖控制器相互獨立
視圖控制器應(yīng)該是獨立的對象庭再。視圖控制器不需要了解另一個視圖控制器的內(nèi)部運作或視圖層級結(jié)構(gòu)。在這種情況下牺堰,兩個視圖控制器需要通信或來回傳遞數(shù)據(jù)拄轻,使用顯式定義的公共接口來完成通信或傳遞數(shù)據(jù)。
delegation設(shè)計模式通常用于管理視圖控制器之間的通信伟葫。有了代理恨搓,一個對象定義一個protocol用于與相關(guān)代理對象通信,該代理對象符合該協(xié)議扒俯。委托對象的確切類型不重要奶卓。重要的是它實現(xiàn)了協(xié)議的方法一疯。
使用根視圖僅作為其他視圖的容器
使用視圖控制器的根視圖僅僅作為內(nèi)容的容器。使用根視圖作為一個容器讓所有的視圖都有一個公共的父視圖夺姑,這樣使布局操作更簡單墩邀。許多自動布局約束要求一個公共的父視圖來保證視圖布局的正確性。
知道你的數(shù)據(jù)在哪里
在MVC設(shè)計模式中盏浙,一個視圖控制器的作用是促進模型對象和視圖對象之間的數(shù)據(jù)移動眉睹。視圖控制器可能存儲一些臨時變量數(shù)據(jù)并執(zhí)行驗證,但它的主要責(zé)任是確保其視圖包含準確的信息废膘。數(shù)據(jù)對象是負責(zé)管理實際數(shù)據(jù)并確保數(shù)據(jù)整體完整性竹海。
在UIDocument和UIDocument類之間關(guān)系分離數(shù)據(jù)和界面的例子。具體來說丐黄,兩者之間沒有默認關(guān)系斋配。UIDocument對象協(xié)調(diào)數(shù)據(jù)的加載和保存,而UIViewController對象協(xié)調(diào)視圖在屏幕上顯示灌闺。如果你創(chuàng)建兩個對象間的關(guān)系艰争,請記住,為了效率桂对,視圖控制器應(yīng)該只緩存來自文檔的數(shù)據(jù)甩卓。實際的數(shù)據(jù)仍然屬于文檔對象。
自適應(yīng)變更
應(yīng)用可以在各種各樣的iOS設(shè)備上運行蕉斜,視圖控制器的設(shè)計師為了適應(yīng)不同大小設(shè)備的屏幕逾柿。而不是使用單獨的視圖控制器來管理不同的屏幕,使用內(nèi)置的自適應(yīng)支持響應(yīng)視圖控制器的大小和size類的變更宅此。UIKit發(fā)送的通知讓你可以大規(guī)幕恚或小規(guī)模的更改你的用戶界面,而無需改變視圖控制器的其余代碼诽凌。
關(guān)于處理自適應(yīng)變化的更多信息毡熏,參見自適應(yīng)模型(The Adaptive Model)