2015-05-14 80 views
3

我在移動領域開發新的和我有一個建築問題,爲我的項目:MVC:我在哪裏放置定製UICollectionCell

這裏是一個定製的UICollectionViewCell正確的地方嗎?
本能地我將它放在(V)查看。

編輯

我會用它這種方式:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    var customCell: CustomCell = collectionView.dequeueReusableCellWithReuseIdentifier(CustomCell.identifier, forIndexPath: indexPath) as! CustomCell 
    customCell.setupWithSomeOtherObject(..) 
    return customCell;    
} 
+0

這取決於,其實...如果單元格不直接對_model_層執行任何操作,並且它由_controller_圖層中的另一個類填充以僅顯示值,則它將位於_view_圖層上。如果您的單元直接連接到_model_圖層並直接進行更改,那麼它就更有可能在_controller_圖層上 - 但基本上'... ViewCell'應該只顯示在_view_圖層上。 – holex

+0

@holex,true。另一個問題是,直接在單元格中進行* model *更改是否正確# –

+0

@flashadvanced,這不是一個好習慣,因爲如果_model_圖層被更新(出於任何原因),_view_圖層根本不應該受到影響。如果你是唯一一個在項目中工作的人,你可以相對快速地重新排列它,但是當你在一個團隊中工作,並且你的工作是管理_view_圖層,並且你的隊友的工作是_model_圖層;在不應該直接連接的任何圖層的簡單更新之後,您不希望獲得額外的工作(而您不希望爲任何人提供額外的工作)。那就是經驗和卑微的意見。 :) – holex

回答

2

把自定義UICollectionViewCell正確的地方是你的視圖組,因爲一個細胞一個觀點,它是繼承UIView ,所以是的,這是正確的地方。

+0

繼承的實際情況並沒有明確定義,但是它與_model_層的連接的確如此,因爲_view_圖層與_model_沒有直接連接,它總是通過_controller_圖層的項目進行。如果存在這種聯繫,那麼這個單元大部分位於_controller_層上(然後我們可以討論它是好還是壞架構),但從邏輯上講,這將成爲它在這種3-way「關係」中的地位。 – holex

1

要直接回答你的問題UICollectionViewCell應該在View中着陸。

如果您不熟悉移動開發,我強烈建議您瞭解什麼是MVVM模型,以及如何將其應用於iOS。 MVC的主要問題是,最終所有事情都以ViewController子類結束。當測試你的代碼時MVVM也有好處(你最終也需要這樣做)。當然,MVVM不是一個聖盃,但你絕對可以給它一個機會。

好文章,開始是: MVVM

+0

感謝提到MVVM,我已經看到了,我認爲很多人會朝着這個方向前進! – SirDeveloper

+0

@SirDeveloper,我個人不會推薦MVVM,長期維護相對困難得多,而且這對資源非常敏感;在iOS上這不是一個明智的選擇。 – holex

1

MVC是一個很大的結構來回答你的問題。但是我會努力的;

讓我們假設你要製作一個基本的照片庫。

您需要一個(M) odel爲您的對象讓我們說它是照片模型,它有名稱,createdDate sth。這個模型只保留一些信息給你的應用程序。

您需要一個(V)查看以顯示一些視覺的東西給用戶。像ImageView來顯示你的圖像,像UICollectionView所以UICollectionView是一個視圖。並且UICollectionViewCellUICollectionView中的視圖。你也可以添加另一個視圖到你的單元格。

您需要一個(C) ontroller來管理和控制此視圖和模型。例如,您在Photo對象中保留一個圖像文件路徑,現在您想在UICollectionViewCell中顯示它UICollectionView

所以你的答案UICollectionViewCell必須在你的Views中。 MVC所有控件必須位於控制器避免您在視圖內的操作。你應該給委託通過對控制器UICollectionView