ViewController編程指南概述-設(shè)計技巧

視圖控制器是運行在iOS上的應用程序的必要工具,UIKit的視圖控制器基礎(chǔ)設(shè)施使得創(chuàng)建復雜的界面而不需要編寫大量代碼變得容易。 當實現(xiàn)你自己的視圖控制器時,請使用以下提示和指南,以確保你不會做可能干擾系統(tǒng)預期的自然行為的事情。

只要可能,請使用系統(tǒng)提供的視圖控制器

許多iOS框架定義視圖控制器,你可以在你的應用程序中使用。 使用這些系統(tǒng)提供的視圖控制器可為您節(jié)省時間,并確保為用戶提供一致的體驗。

大多數(shù)系統(tǒng)視圖控制器是為特定任務(wù)設(shè)計的。 一些視圖控制器提供對諸如聯(lián)系人的用戶數(shù)據(jù)的訪問。 其他人可能提供訪問硬件或提供專門調(diào)整的界面來管理媒體。 例如,UIKit中的UIImagePickerController類顯示用于捕獲圖片和視頻以及用于訪問用戶的相機膠卷的標準界面。

在創(chuàng)建自己的自定義視圖控制器之前,請查看現(xiàn)有框架,以查看是否已存在要執(zhí)行的任務(wù)的視圖控制器。

  • UIKit框架提供視圖控制器,用于顯示警報,拍攝照片和視頻,以及在iCloud上管理文件。 UIKit還定義了許多標準容器視圖控制器,您可以使用它們來組織內(nèi)容。
  • GameKit框架提供了用于匹配玩家和用于管理排行榜,成就和其他游戲功能的視圖控制器。
    地址簿UI框架提供用于顯示和選擇聯(lián)系人信息的視圖控制器。
  • MediaPlayer框架提供了視圖控制器,用于播放和管理視頻,以及從用戶庫中選擇媒體資產(chǎn)。
  • EventKit UI框架提供了用于顯示和編輯用戶日歷數(shù)據(jù)的視圖控制器。
  • GLKit框架提供了一個用于管理OpenGL渲染表面的視圖控制器。
  • Multipeer連接框架提供視圖控制器,用于檢測其他用戶并邀請他們連接。
  • 消息UI框架提供用于撰寫電子郵件和SMS消息的視圖控制器。
  • PassKit框架提供了視圖控制器來顯示通行證并將它們添加到Passbook。
  • 社交框架提供了用于撰寫Twitter,F(xiàn)acebook和其他社交媒體網(wǎng)站的消息的視圖控制器。
  • AVFoundation框架提供用于顯示媒體資產(chǎn)的視圖控制器。

重要

切勿修改系統(tǒng)提供的視圖控制器的視圖層次結(jié)構(gòu)。 每個視圖控制器擁有
其視圖層次結(jié)構(gòu),并負責維護該層次結(jié)構(gòu)的完整性。 進行更改可能會在
代碼中引入錯誤或阻止擁有視圖控制器正常運行。 在系統(tǒng)視圖控制器的
情況下,總是依靠視圖控制器的公開可用的方法和屬性來進行所有修
改。

使每個視圖控制器成為獨立的島嶼

視圖控制器應該始終是自包含的對象。 沒有視圖控制器應該知道另一個視圖控制器的內(nèi)部工作原理或視圖層次結(jié)構(gòu)。 在兩個視圖控制器需要來回通信或傳遞數(shù)據(jù)的情況下,它們應該總是使用明確定義的公共接口來這樣做。

委派設(shè)計模式經(jīng)常用于管理視圖控制器之間的通信。 通過委托,一個對象定義用于與相關(guān)聯(lián)的委托對象通信的協(xié)議,該委托對象是符合協(xié)議的任何對象。 委托對象的確切類型不重要。 所有重要的是它實現(xiàn)協(xié)議的方法。

使用根視圖作為其他視圖的容器

將視圖控制器的根視圖僅用作其余內(nèi)容的容器。 使用根視圖作為容器給你的所有視圖一個共同的父視圖,這使得許多布局操作更簡單。 許多自動布局約束需要通用的父視圖來正確布置視圖。

知道你的數(shù)據(jù)在哪里

在模型 - 視圖 - 控制器設(shè)計模式中,視圖控制器的角色是便于在模型對象和視圖對象之間移動數(shù)據(jù)。 視圖控制器可以在臨時變量中存儲一些數(shù)據(jù)并執(zhí)行一些驗證,但它的主要職責是確保其視圖包含準確的信息。 您的數(shù)據(jù)對象負責管理實際數(shù)據(jù)并確保數(shù)據(jù)的整體完整性。

在UIDocument和UIViewController類之間的關(guān)系中存在數(shù)據(jù)和界面的分離的示例。 具體來說,兩者之間不存在默認關(guān)系。 UIDocument對象協(xié)調(diào)加載和保存數(shù)據(jù),而UIViewController對象協(xié)調(diào)屏幕上的視圖顯示。 如果您在兩個對象之間創(chuàng)建關(guān)系,請記住,視圖控制器應該只緩存文檔中的信息以提高效率。 實際數(shù)據(jù)仍然屬于文檔對象。

屏幕適配更改

應用程序可以在各種iOS設(shè)備上運行,而視圖控制器設(shè)計為適應這些設(shè)備上不同大小的屏幕。 不要使用單獨的視圖控制器來管理不同屏幕上的內(nèi)容,請使用內(nèi)置的自適應支持來響應視圖控制器中的大小和大小類更改。 UIKit發(fā)送的通知為您提供了對用戶界面進行大規(guī)模和小規(guī)模更改的機會,而無需更改其余的視圖控制器代碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容