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

时间:2014-11-03 13:48:25

标签: ios objective-c uiview uiviewcontroller uigesturerecognizer

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

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

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

1 个答案:

答案 0 :(得分:1)

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

所以,这意味着......

  1. 卡感觉点击并在其委托(视图控制器)中调用一个函数,然后加载一个URL。
    1. 点击手势识别器(在视图控制器中)从卡中点击并打开URL。
    2. 如果该卡是在多个地方使用的控件(或者如果屏幕上有多个控件),那么最好使productCardView成为UIControl的子类而不是UIView。 (UIButtonUISlider等等都是UIControl)的子类。

      您无需更改,但您可以执行类似......

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

      就像一个按钮。

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