mvc,即模型-檢視-控制器(model-view-model),是軟體開發中應用甚廣的一種設計模式。其用意是將資料與檢視分化,利用模型資料控制檢視的顯示,但兩者的互動由控制器控制。在ios開發中,mvc模式應用很廣,是ios控制項設計的主要模式之一。
uitableview與uicollectionview 可以說是ios開發中最能體現mvc模式的兩種控制項,以下舉uitableview為例,其中uitableviewcell是做顯示任務的view,那麼每行uitableviewcell都顯示資料來源(datasource)對應的資料,如果把每行顯示的資料封裝成物件,那麼我們把它們稱為模型物件(模型資料model)。
即使不把資料封裝成物件,我們常見的就是字典(nsdictionary)和陣列(nsarray),也能按部就班把資料布局到uitableviewcell上,一定層面上來說也是mvc模式。但為什麼不把它封裝成物件呢?有時候,資料的某些字段不能直接布局到view中顯示,特別是遇到複雜的資料結構,這時封裝成物件的好處就體現了,我們可以在物件中處理這些欄位後再顯示到view上。封裝成物件,更加利於我們控制業務處理和編碼,這可是在物件導向程式設計。
但有些時候,每行uitableviewcell顯示的「布局格式」都不一樣,uitableviewcell永遠不知道下一條到底要怎樣布局,比如微博,uitableviewcell不知道下一條微博有沒有**,有沒有,有的話有幾張等等。那這時候應該怎樣布局?
可以觀察到,微博的資料格式是一定的,就是說一條什麼都有**發、等)的微博,這時候uitableviewcell中的子控制項個數達到飽滿,無論資料要顯示什麼,都有子控制項可以顯示。但如果有一條微博比如少了,那麼要麼remove這個顯示的view,要麼將這個顯示的view的frame設為cgrectzero(那麼view的布局格式(如果我們把子空間的位置稱為「布局格式」)也是確定的,只是subview的frame在變)。可想而知只要將缺少的那些字段對應的view的frame設為cgrectzero即可,不用反覆移除新增subview (uitableviewcell 是採取迴圈**利用的)。
這裡有個問題,根據上面一段思路,可以自定義uitableviewcell,然後引用乙個模型物件並重寫其setter方法,在setter方法中拿到模型物件根據資料計算subview.frame並布局,缺少的字段對應的view.frame直接設為0。但是這樣一來,上拉載入資料的時候需要時間計算frame,那麼介面效果會顯示卡,而且當回滾的時候又進行重複的計算工作。這時需要再新建乙個模型(姑且稱之為handler模型),讓它引用微博模型,然後將對微博模型的處理還有各個subview的frame的計算封裝到handler模型中,而自定義uitableviewcell則引用handler模型。那麼在載入資料的時候,該模型拿到微博模型資料在setter中即可計算subview.frame,這時uitableviewcell的subview的frame已經準備好,自定義uitableviewcell的模型的setter中直接布局和賦值資料(handler模型引用著微博模型)
根據模型物件(model)的封裝的介紹,遇到複雜的uitableview通常會自定義cell,把不變的介面因素在初始化建立的時候就可以寫定,動態的介面因素留給模型去控制。自定義uitableviewcell,讓它引用模型物件並在其setter中布局並賦值,如果subview.frame仍不確定,則再封裝乙個frame模型並引用模型物件,讓自定義cell引用f模型物件並在setter中布局。
以上兩種布局其實可以看成是一種,即uitableviewcell中的subviews的布局都是一定的了,即使是subview.frame為cgrectzero,但這個subview還必須存在,否則載入的時候會增加開銷。
iOS開發 MVC設計模式
聽說現在開始流行mvvm設計模式,聽上去好像有點新奇,暫時還是習慣mvc設計模式,接下來主講mvc模式.說到ios中的mvc還是從2011秋季斯坦福課程的老頭的iphone公開課講起,這個教授講的概念很準確 並且最為淺顯易懂的.model view controller mvc設計模式認為有三種型別...
IOS開發基礎之 MVC模式
整理自史丹福大學iphone開發公開課,並加入了一些自己的理解。一 概念 model 你的應用程式是什麼,是使用者介面無關的部分 controller 你的應用程式如何將model顯示給使用者 ui邏輯 是中心是橋梁,連通model和view view controller的奴才 minion 小跟...
IOS開發基礎之 MVC模式
整理自史丹福大學iphone開發公開課,並加入了一些自己的理解。一 概念 model 你的應用程式是什麼,是使用者介面無關的部分 controller 你的應用程式如何將model顯示給使用者 ui邏輯 是中心是橋梁,連通model和view view controller的奴才 minion 小跟...