2011-12-05 76 views
3

在看完斯坦福大學的iTunesU CS193p在線課程後,我對實現MVC設計的正確方法提出了疑問。當使用MVC時,是否有必要創建一個單獨的視圖類?

通常當我做一個應用程序時,我將視圖設置爲控制器的一部分,並添加UIButtons,UILabels等。本質上,控制器和視圖成爲一體,除非算上UIObjects爲視圖對象

在早期CS193p例子之一導師從控制器拆分視圖斷作爲一個單獨的物體(子類的UIView),實施前控制器對象符合的視圖上的協議和委託屬性。我很好奇CS193p設計的實用性,我可以理解,更好地代表MVC設計模式(特別是作爲教學輔助工具),但是它在實際應用中對它的應用稍有懷疑。

回答

4

將「視圖」想象成諸如UIButton和UIImageView之類的對象;可重複使用的組件,它們不必知道應用程序的其他部分。您的視圖控制器是負責配置視圖對象並管理其狀態的對象。

有些時候你想要UIView的子類,主要是當你需要在drawRect:做自定義繪圖。你不會繼承UIView來自定義行爲,這就是你的視圖控制器的用途。例如,你不會子類UITableView,只是讓表視圖自己的委託。相反,你會讓你的視圖控制器的表視圖的委託。

+0

非常感謝你的回答,我所指的例子的確確實現了 - (void)drawRect:(CGRect)矩形,所以更有可能是使用UIView子類的原因。再次感謝,我沒有注意到。 – fuzzygoat

1

這不是必須的。如果您使用Interface Builder,那麼爲什麼要構建自定義視圖(將UI設置代碼從業務代碼中解脫出來)的大多數原因都已處理完畢。但是,如果您想爲視圖構建自定義操作,或者設置一些您無法完全理解的屬性,那麼將視圖分解爲單獨的類是有意義的。

+0

非常感謝,謝謝。 – fuzzygoat

2

在iOS中,UIView類實現了圖形刷新和觸摸處理程序,而不是視圖控制器類。如果您需要drawRect:或touchesBegan :,等等,您將需要一個單獨的UIView子類。

這部分可能是因爲這是按鈕和標籤本身的行爲方式。他們重新繪製自己,並委託處理過的觸摸。視圖控制器不會繪製其內容並跟蹤xy位置。

+0

感謝您解釋與 - (void)drawRect:(CGRect)rect有關的UIView子類的需求,現在我明白我引用的示例中發生了什麼。 – fuzzygoat

相關問題