MVC:我应该在 View Controller 或 UIView 的自定义子类中添加和实现触摸手势吗

Posted

技术标签:

【中文标题】MVC:我应该在 View Controller 或 UIView 的自定义子类中添加和实现触摸手势吗【英文标题】:MVC: should i add and implement touch gestures in the View Controller or my custom subclass of UIView 【发布时间】:2014-11-03 13:48:24 【问题描述】:

我有一个UIView 的自定义子类,称为productCardView,它非常简单,并且有一些UIImageViews 和UILabels 作为子视图。我添加了子视图并将它们设置为- (void)drawRect:(CGRect)rect 方法,一切都很好。

在我的视图控制器中,我从远程服务器获取了一些数据,因此填充了应该看到的productCardViews。目的是当用户点击每张卡片时,程序会转到目标网址(每张卡片的 NSURL 属性)。

问题是根据 MVC 的基础知识,我应该在视图中添加 UITapGestureRecognizer,在我的 productCardView 实现中还是在我的视图控制器中? 如果我要将它添加到视图控制器中,基本上我会将适当的代码放在 viewDidLoad 方法中,在那里我创建卡片实例,但如果我应该在视图本身中实现它,where 我应该输入代码吗? (在-(void)drawRect:(CGRect)rect?)

【问题讨论】:

【参考方案1】:

无论点击是在卡上还是在视图控制器上,您都应该从视图控制器加载 url。

所以,这意味着...

    Card 感觉到点击并调用其委托(视图控制器)中的一个函数,然后加载一个 URL。

    点击手势识别器(在视图控制器中)从卡片中获取点击并打开 URL。

如果卡片是在多个地方使用的控件(或者屏幕上有多个),则最好将productCardView 设为UIControl 的子类而不是UIView。 (UIButtonUISlider等……都是UIControl的子类)。

你不需要改变太多,但你可以做一些类似的事情......

[productCardView addTarget:self action:@selector(cardTapped:) event:UITouchUpInside];

就像一个按钮。

然后您在卡片视图中处理触摸并trigger 处理事件UITouchUpInside 的操作。

【讨论】:

非常感谢,因为我的视图控制器上有几张这样的卡片,所以我将它设为 UIControl 的子类并使用了目标/动作。

以上是关于MVC:我应该在 View Controller 或 UIView 的自定义子类中添加和实现触摸手势吗的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC中的mvc:view-controller标签

MVC - 我需要在视图中使用控制器吗?

ASP.NET MVC中Controller与View之间的数据传递

如何使用 ajax get 将数据从 View 传递到 Controller 或使用参数在 mvc 中发布

学习SpringMVC之mvc:view-controller标签

Asp.net MVC中 Controller 与 View之间的数据传递