2011-10-28 58 views
6

想要問這個人的意見。我有一個uiimageview子類,在它的初始化程序中,我爲imageview添加了一些手勢識別器,並且還在類中包含了手勢識別器委託方法。我的問題是,這是否違反模型視圖控制器?是否所有與控制視圖有關的代碼都在視圖控制器中?與之相同,在視圖中放置按鈕操作方法。總之,有興趣聽取意見。將手勢識別器/操作方法附加到視圖違反了模型視圖控制器?

+0

我喜歡這類問題。 – Morkrom

回答

5

從某種意義上說,是的,這違反了MVC模式。正如你所說,這個觀點不應該與如何控制它有關,在應用程序的另一部分將這些代碼分組是更好的習慣。

此外,OOP的最大優點之一是能夠重用類。像這樣的視圖可以重用,沒有任何問題,因爲所有控制代碼(特定於應用程序)都不在其中。 如果在視圖中包含委託方法,則無法重用它,或者每次都必須更改委託方法!


但是規則是針對一般情況。查看適用於Mac OS X的Cocoa框架:您擁有可可綁定,它允許您直接更改視圖內容以響應模型中的數據更改。這也以某種方式違反了MVC模式。

另一個示例,請參閱UIViewController。它必須是一個控制者,但它與問題持續存在的觀點密切相關。視圖&控制器之間的分隔並不像MVC想要的那樣明確。


最後,我要說的是,這是一個好習慣,遵循的模式(只要它們符合你的需求),你可以按照它使用給定的框架的方式。但是有些情況下,如果你明確說明,那麼創建一些捷徑並打破規則可能會很有趣。

2

似乎是一個非常好的主意,如果行動只會影響視圖的外觀。例如,將平移手勢識別器附加到視圖以將其拖動,似乎是一個好主意。

但是,如果它會在您的應用程序中引發更廣泛的影響,它可能不是正確的方法。

0

從Apple顯影劑核心能力DOC(https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html):

視圖目的是在一個應用程序,用戶可以看到的對象。視圖對象知道如何繪製自己並可以響應用戶操作。

就我個人而言,我會解釋這是爲了表示在視圖類中編寫手勢識別器,只要手勢允許視圖「響應用戶操作」即可。

在Apple API中也有一些先例,我認爲 - 因爲一些UIView後代(例如UIButton)可以識別手勢。

相關問題