想要問這個人的意見。我有一個uiimageview子類,在它的初始化程序中,我爲imageview添加了一些手勢識別器,並且還在類中包含了手勢識別器委託方法。我的問題是,這是否違反模型視圖控制器?是否所有與控制視圖有關的代碼都在視圖控制器中?與之相同,在視圖中放置按鈕操作方法。總之,有興趣聽取意見。將手勢識別器/操作方法附加到視圖違反了模型視圖控制器?
回答
從某種意義上說,是的,這違反了MVC模式。正如你所說,這個觀點不應該與如何控制它有關,在應用程序的另一部分將這些代碼分組是更好的習慣。
此外,OOP的最大優點之一是能夠重用類。像這樣的視圖可以重用,沒有任何問題,因爲所有控制代碼(特定於應用程序)都不在其中。 如果在視圖中包含委託方法,則無法重用它,或者每次都必須更改委託方法!
但是規則是針對一般情況。查看適用於Mac OS X的Cocoa框架:您擁有可可綁定,它允許您直接更改視圖內容以響應模型中的數據更改。這也以某種方式違反了MVC模式。
另一個示例,請參閱UIViewController。它必須是一個控制者,但它與問題持續存在的觀點密切相關。視圖&控制器之間的分隔並不像MVC想要的那樣明確。
最後,我要說的是,這是一個好習慣,遵循的模式(只要它們符合你的需求),你可以按照它使用給定的框架的方式。但是有些情況下,如果你明確說明,那麼創建一些捷徑並打破規則可能會很有趣。
似乎是一個非常好的主意,如果行動只會影響視圖的外觀。例如,將平移手勢識別器附加到視圖以將其拖動,似乎是一個好主意。
但是,如果它會在您的應用程序中引發更廣泛的影響,它可能不是正確的方法。
從Apple顯影劑核心能力DOC(https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html):
視圖目的是在一個應用程序,用戶可以看到的對象。視圖對象知道如何繪製自己並可以響應用戶操作。
就我個人而言,我會解釋這是爲了表示在視圖類中編寫手勢識別器,只要手勢允許視圖「響應用戶操作」即可。
在Apple API中也有一些先例,我認爲 - 因爲一些UIView後代(例如UIButton)可以識別手勢。
- 1. 將手勢識別器附加到多個圖像視圖
- 2. 在視圖或控制器類中放置手勢識別器
- 3. 手勢識別器的UIButton子視圖
- 4. 關於視圖和手勢識別器
- 5. 如何將現有視圖附加到控制器操作?
- 6. 識別iOS視圖控制器類型
- 7. 手勢識別器完成後將觸摸傳遞給父視圖控制器
- 8. 我怎樣才能手勢識別器添加到視圖模型C#
- 9. 模型視圖控制器中的模型視圖控制器
- 10. 瞭解模型 - 視圖 - 控制器
- 11. 帶頁面控件和三個視圖的手勢識別器
- 12. 使用平移手勢識別器來關閉視圖控制器
- 13. 禁用並重新啓用頁面視圖控制器手勢識別器?
- 14. 模型視圖控制器
- 15. 訪問從1個視圖控制器到另一個圖像陣列,添加滑動手勢識別器
- 16. 手勢識別器不能在子視圖上工作
- 17. 將手勢識別器應用於所有視圖組件?
- 18. 如何使用模型/視圖/控制器方法制作GUI?
- 19. 如何將手勢識別器添加到一系列子視圖?
- 20. 在Codeigniter中:如何識別視圖的模型和控制器?
- 21. 根據Java中的模型 - 視圖 - 控制器製作視圖
- 22. iOS - 將子視圖添加到子視圖控制器視圖
- 23. 子視圖上未識別的手勢
- 24. 模式視圖控制器:方法
- 25. 將視圖控制器從根到視圖控制器(SplitView)
- 26. iPhone手工製作視圖/控制器
- 27. 將UIPageViewController添加到視圖控制器的容器視圖
- 28. 從另一個視圖控制器的視圖控制器觸發器操作
- 29. 從非視圖控制器類監視手勢
- 30. [視圖控制器presentPopupViewController:將animationType:]:無法識別選擇
我喜歡這類問題。 – Morkrom