想要问这个人的意见。我有一个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