2011-03-15 69 views
2

對不起,如果標題聽起來令人困惑,但我不能想出更好的東西。實現可以處理兩種不同視圖類型的視圖控制器

基本上我有一個視圖控制器,管理一個分頁滾動視圖,它顯示從數據庫中提取的幾個圖像。我是MVC的新手,我嘗試以最好的方式按照這種模式編寫我的代碼(我的經驗僅僅基於查看其他人的代碼並理解Apple的類如何工作,因此可能有缺陷;如果你能告訴我,我會很感激的)。

這就是我所做的:我有一個自定義視圖類,其中包含UIScrollView,並且有兩個公共屬性:dataSourcedelegate。數據源對象必須符合我定義的協議;它會返回圖像數量和圖像本身。選定頁面更改時,代表會收到通知。

我希望我說得對。無論如何,它的工作原理;我可以在沒有任何問題的情況下重新實現數據源(如果需要),並將提供數據的代碼與顯示數據的代碼分開。

但是現在我遇到了一個問題:我需要能夠用盡可能少的代碼複製的類似CoverFlow的視圖替換分頁滾動視圖。我知道必須有更好的方法來實現這一點,而無需使用此CoverFlow視圖創建另一個視圖控制器類。這兩個視圖類具有相似的方法,並以類似的方式工作,所以使用相同的視圖控制器代碼而不是重複它是有意義的。

也許我可以用泛型方法編寫一個抽象類並編寫它的兩個實現,一個用於滾動視圖,另一個用於CoverFlow視圖,然後基於傳遞給參數的參數在控制器中實例化其中的一個它。這是達到這個目標的最好方法嗎?

我希望這不是太混亂,我的方法沒有太多缺陷。謝謝。

回答

1

您通常需要單獨的視圖控制器爲單獨的視圖,因爲您最終不得不檢查您在每個單一方法中使用哪種類型的視圖。然後特殊情況蔓延,你的代碼變得混亂。此外,你可能會決定在某個時候完全拋棄一種觀點。代碼越模塊化越好。

模型 - 視圖 - 控制器設計的關鍵思想是視圖在邏輯上與數據模型分離。該模型應該是程序的實際核心,它應該通過控制器提供所有視圖的數據。如果你已經正確地實現了這個設計,你就不會有太多的定製和很少的代碼重複,因爲這個模型會支持每一個可能的視圖。

在大多數應用程序中,它是最具自定義性的控制器,您不應該花費很多精力來嘗試防止重複。如果您發現自己在控制器之間重複了代碼,那麼您可能會在控制器中建模或查看不應該在其中的邏輯。

就你而言,它看起來像數據源對象與你的模型接口(就像UITableViewDataSource對象一樣),並且由於兩個視圖使用相同的邏輯,所以如果你定義了合適的協議,你可以爲兩個視圖使用相同的委託。每個視圖都需要一個自定義委託來處理自定義,但這是您應該使用的委託設計模式的一部分。

1

也許可以寫一個抽象 類包含通用方法和寫的它 兩個實現,一個用於 滾動視圖和一個用於的CoverFlow 視圖,然後實例化 兩個中的一個控制器中的,基於傳遞給它的參數 。這是 達到這個最好的方法嗎?

這聽起來像一個體面的做法。

您也可以實現一個視圖控制器來管理兩種視圖類型,在loadView中按需創建正確的視圖。

相關問題