iOS中UIViewController完美瘦身

對于UIViewController瘦身是一個老生常談的問題此改,現(xiàn)在也有比較多的架構(gòu)來實現(xiàn)此效果,比如MVVM等等。不過這次我們是對于傳統(tǒng)的MVC架構(gòu)設(shè)計實現(xiàn)完美的瘦身茅姜。此方法也完全不妨礙在此基礎(chǔ)上使用MVVM等其他方法瘦身狸相。

情景

首先讓我們看一下我們要做的界面效果


看著界面不是很難薛匪,最上邊是二維碼掃描;中間輸入一些信息脓鹃,數(shù)字1逸尖、2、3是按鈕點擊網(wǎng)絡(luò)請求然后彈出選擇界面供用戶選擇瘸右;最下邊歷史數(shù)據(jù)娇跟。

其實寫下來交互非常的多,接口非常多太颤,業(yè)務(wù)邏輯也非常的復(fù)雜苞俘,
傳統(tǒng)MVC下來整個.h文件估計至少1500行以上。

瘦身思路

通過上圖中的兩根紅色實現(xiàn)龄章,我們將此界面劃分成三部分吃谣。則聲明四個UIViewController:
分別為:

  • ScanViewController 掃描功能
  • InfoInputViewController輸入信息
  • HistoryViewController歷史數(shù)據(jù)
  • MyViewController組裝功能
    MyViewController中我們進行組裝,并處理一些非業(yè)務(wù)事件
self.myScanVC = [[ScanViewController alloc] init];
[self addChildViewController:self.myScanVC];
[self.view addSubview:self.myScanVC.view];
[self.myScanVC didMoveToParentViewController:self];

self.myInforInputVC = [[InfoInputViewController alloc] init];
[self addChildViewController:self.myInforInputVC];
[self.view addSubview:self.myInforInputVC.view];
[self.myInforInputVC didMoveToParentViewController:self];

self.myHistoryVC = [[HistoryViewController alloc] init];
[self addChildViewController:self.myHistoryVC];
[self.view addSubview:self.myHistoryVC.view];
[self.myHistoryVC didMoveToParentViewController:self];

通過此方法做裙,我們第一步已經(jīng)成功降低了耦合度岗憋,而且在項目中還有更大的一個優(yōu)點就是ScanViewControllerHistoryViewController兩個類可以達到復(fù)用的效果,其他功能也需要這兩個功能锚贱,所有的業(yè)務(wù)邏輯全部在InfoInputViewController


由于InfoInputViewController中也有非常多的業(yè)務(wù)邏輯而且以按鈕點擊之后開始響應(yīng)為主仔戈。
現(xiàn)在看一下我們的點擊事件有多簡潔:

- (IBAction)actionClick:(UIButton *)sender {
    [self.view endEditing:YES];
    [self.actionsContext doActionWithLevel:sender.tag];
}

是的沒有任何判斷,而且我們把所有的業(yè)務(wù)邏輯均封裝在了一個一個的Action中拧廊。
下午是我們類結(jié)構(gòu)的設(shè)計


以上設(shè)計思路其實我有單獨寫過《設(shè)計模式之感悟和實踐(二)》
具體代碼文章中也有监徘。

通過此方法既消除了if...else的判斷,同時每個點擊時間的業(yè)務(wù)邏輯也就行了單獨的封裝吧碾。


通過以上兩個方法的結(jié)合成功了將“UIViewController”瘦的簡直不能再瘦了;丝!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滤港,一起剝皮案震驚了整個濱河市廊蜒,隨后出現(xiàn)的幾起案子趴拧,更是在濱河造成了極大的恐慌,老刑警劉巖山叮,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件著榴,死亡現(xiàn)場離奇詭異,居然都是意外死亡屁倔,警方通過查閱死者的電腦和手機脑又,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锐借,“玉大人问麸,你說我怎么就攤上這事〕瑁” “怎么了严卖?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長布轿。 經(jīng)常有香客問我哮笆,道長,這世上最難降的妖魔是什么汰扭? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任稠肘,我火速辦了婚禮,結(jié)果婚禮上萝毛,老公的妹妹穿的比我還像新娘项阴。我一直安慰自己,他們只是感情好笆包,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布环揽。 她就那樣靜靜地躺著,像睡著了一般庵佣。 火紅的嫁衣襯著肌膚如雪薯演。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天秧了,我揣著相機與錄音,去河邊找鬼序无。 笑死验毡,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的帝嗡。 我是一名探鬼主播晶通,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼哟玷!你這毒婦竟也來了狮辽?” 一聲冷哼從身側(cè)響起一也,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喉脖,沒想到半個月后椰苟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡树叽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年舆蝴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片题诵。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡洁仗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出性锭,到底是詐尸還是另有隱情赠潦,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布草冈,位于F島的核電站她奥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疲陕。R本人自食惡果不足惜方淤,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蹄殃。 院中可真熱鬧携茂,春花似錦、人聲如沸诅岩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吩谦。三九已至鸳谜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間式廷,已是汗流浹背咐扭。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留滑废,地道東北人蝗肪。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像蠕趁,于是被迫代替她去往敵國和親薛闪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

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