ViewController的使用技巧

前言

為什么翻譯這系列文章

概述

ViewController是App在iOS系統(tǒng)上運行的必須工具脖捻,也是UIKit框架的基礎(chǔ)組件阔逼,使用它可以不用寫太多代碼就能構(gòu)建出復(fù)雜的用戶界面。當(dāng)你實現(xiàn)自己的ViewController的時候地沮,使用下面的提示和規(guī)范能幫助你避免做出違反系統(tǒng)不期望的行為嗜浮。

盡量使用系統(tǒng)支持的ViewController

許多iOS框架定義了ViewController,你可以在自己的App中使用這些ViewController摩疑。使用系統(tǒng)提供的ViewController可以節(jié)省你的開發(fā)時間危融,并且對用戶而言雷袋,也是一種很舒適的體驗吉殃。

大多數(shù)系統(tǒng)的ViewController使用實現(xiàn)特定功能的。比如有些ViewController用來訪問用戶數(shù)據(jù)如通訊錄、有些ViewController提供訪問硬件的功能蛋勺、有些ViewController提供訪問多媒體的功能瓦灶,比如說UIKit框架中的UIImagePickerController類可以訪問用戶的相冊,來展示一個標(biāo)準(zhǔn)的圖片或者視頻交互界面抱完。

在創(chuàng)建自己的ViewController之前贼陶,先確定一下現(xiàn)有的框架中是否包含ViewController可以用完成你的開發(fā)任務(wù)。

  • UIKit框架提供了彈出框巧娱、調(diào)用相機(jī)和視頻碉怔、管理iCoud上的文件等類型的ViewController。UIKit框架中還提供了許多容器類型的ViewController禁添,你可以使用他們來組織你的內(nèi)容
  • Gamekit框架提供了玩家匹配撮胧、排行榜、成就和其他具有游戲特性的ViewController上荡。
  • Address Book UI 框架提供了展示和選擇聯(lián)系人的ViewController趴樱。
  • MediaPlayer框架提供了播放和管理視頻的ViewController,還有選擇媒體資源的ViewController酪捡。
  • EnventKit框架提供了展示和編輯用戶日歷的的ViewController叁征。
  • GLkit框架提供了管理OpenGL渲染曲面的ViewController。
  • Multipeer Connectivity框架提供了檢測其他用戶并邀請他們連接的ViewController逛薇。
  • Message UI框架提供了構(gòu)成電子郵件和短信的ViewController捺疼。
  • PassKit框架提供了展示憑證和將憑證添加到存折的ViewController。
  • Social框架提供了向Twitter永罚、facebook和其他社會化媒體網(wǎng)站分享信息的UI啤呼。
  • AVFoundation框架提供了展示媒體資源的ViewController。

注意:不要去視圖修改系統(tǒng)提供的ViewController的視圖層級結(jié)構(gòu)呢袱。每個ViewController有其自己的視圖層級結(jié)構(gòu)官扣,并負(fù)責(zé)維持其層級結(jié)構(gòu)的完整性。進(jìn)行修改可能引發(fā)bug或者不能正確的顯示ViewController羞福。在有些系統(tǒng)提供的ViewController中惕蹄,可以依據(jù)其提供的公開方法或者屬性來做響應(yīng)的修改。

關(guān)于更多特定功能的ViewController治专,請參考相應(yīng)框架的參考文檔卖陵。

保證ViewController之間的隔離

ViewController應(yīng)當(dāng)是自足型對象。沒有ViewController可以了解到另一個ViewController的內(nèi)部工作和它的視圖層級张峰。當(dāng)兩個ViewController需要通信或者傳遞數(shù)據(jù)的時候泪蔫,應(yīng)該使用它們給定的公共接口。

代理模式在管理兩個ViewController之間通信的時候經(jīng)常用到喘批。在代理模式下撩荣,一個ViewController定義與相關(guān)交互代理對象相關(guān)協(xié)議铣揉,代理對象實現(xiàn)這個協(xié)議。代理對象的類型不需要確切的類型婿滓,重要的是它實現(xiàn)了協(xié)議方法老速。

將ViewController的根視圖作為其他視圖的容器

使用ViewController的根視圖最為其他內(nèi)容的容器。使用根視圖作為容器可以給其他所有的View一個公共的父視圖凸主,這使得許多布局操作變得非常簡單橘券。許多自動布局約束需要共同的父視圖來設(shè)置視圖的屬性。

了解數(shù)據(jù)的流向

在模型-視圖-控制器的設(shè)計模式下卿吐,ViewController的角色是促進(jìn)數(shù)據(jù)在模型對象和視圖對象之間流動旁舰。ViewController可能在臨時變量中存儲一些數(shù)據(jù),并且執(zhí)行一些校驗嗡官,但是ViewController的主要職責(zé)是確保視圖的包含準(zhǔn)確的信息箭窜。數(shù)據(jù)對象的責(zé)任在于管理真實的數(shù)據(jù)和確保數(shù)據(jù)的完整性。

視圖和數(shù)據(jù)分離的一個例子是衍腥,UIDocument類與UIViewController類的關(guān)系磺樱。這兩個類默認(rèn)沒有任何關(guān)系。一個UIDocument對象作用是加載和報錯數(shù)據(jù)婆咸,而UIViewController的作用是將視圖展示的屏幕上竹捉。如果你要使用這兩個對象,需要注意的是尚骄,ViewController只需要從document對象中獲取有效的對象即可块差。真實的數(shù)據(jù)仍然屬于document對象。

適應(yīng)屏幕的變化

Apps可以運行在不同的iOS設(shè)備上倔丈,并且ViewController設(shè)計的時候已經(jīng)適配了不同尺寸的屏幕憨闰。不需要在不同的設(shè)備上使用不同ViewController,而是使用ViewController內(nèi)置的適配器去適配不同的尺寸和尺寸的變化需五。UIKit發(fā)送的通知讓您有機(jī)會對用戶界面進(jìn)行大規(guī)模和小規(guī)模的更改鹉动,而無需更改視圖控制器代碼的其余部分。

關(guān)于更多屏幕適配的信息宏邮,請參考The Adaptive Model泽示。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蜀铲,隨后出現(xiàn)的幾起案子边琉,更是在濱河造成了極大的恐慌属百,老刑警劉巖记劝,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異族扰,居然都是意外死亡厌丑,警方通過查閱死者的電腦和手機(jī)定欧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怒竿,“玉大人砍鸠,你說我怎么就攤上這事「郏” “怎么了爷辱?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長朦肘。 經(jīng)常有香客問我饭弓,道長,這世上最難降的妖魔是什么媒抠? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任弟断,我火速辦了婚禮,結(jié)果婚禮上趴生,老公的妹妹穿的比我還像新娘阀趴。我一直安慰自己,他們只是感情好刘急,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锉桑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪民轴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天后裸,我揣著相機(jī)與錄音瑰钮,去河邊找鬼微驶。 笑死,一個胖子當(dāng)著我的面吹牛因苹,可吹牛的內(nèi)容都是我干的苟耻。 我是一名探鬼主播扶檐,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼款筑!你這毒婦竟也來了智蝠?” 一聲冷哼從身側(cè)響起腾么,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎杈湾,沒想到半個月后解虱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡漆撞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年殴泰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浮驳。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡艰匙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抹恳,到底是詐尸還是另有隱情员凝,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布奋献,位于F島的核電站健霹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瓶蚂。R本人自食惡果不足惜糖埋,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窃这。 院中可真熱鬧瞳别,春花似錦、人聲如沸杭攻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兆解。三九已至馆铁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锅睛,已是汗流浹背埠巨。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留现拒,地道東北人辣垒。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像印蔬,于是被迫代替她去往敵國和親勋桶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件哥遮、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 做新媒體,到底能掙多少錢陵究? 新媒體運營其實就像淘寶一樣眠饮,早期堅持下來兩三年的賣家,年收入千萬也很正常铜邮。如果是做個體...
    你的文采太亮了閱讀 330評論 0 0
  • 最近總是靜不下來仪召,心里浮躁的很,像浮萍松蒜,總是蕩起來扔茅,似乎每個落地的時候,冷靜不下來秸苗。 好像是每個人都會經(jīng)歷這一段時...
    飛鳥集寧閱讀 171評論 0 0
  • 許是分手太久了召娜,一下竟記不大清曾經(jīng)那些溫馨的瞬間。 只有在某個特定的時間點惊楼,記憶的片段會稀稀落落地被觸發(fā)出玖瘸,讓你一...
    米粥的江湖閱讀 184評論 0 1
  • 從前問過前男友,“你覺得檀咙,我是比較外向還是內(nèi)向的?”他沒有猶豫說外向的弧可。我問為何,答棕诵,“活潑可愛,開朗樂觀校套,擅長交...
    木木魚阿閱讀 275評論 0 0