Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios MVC:我应该在视图控制器或UIView的自定义子类中添加并实现触摸手势吗_Ios_Objective C_Uiview_Uiviewcontroller_Uigesturerecognizer - Fatal编程技术网

Ios MVC:我应该在视图控制器或UIView的自定义子类中添加并实现触摸手势吗

Ios MVC:我应该在视图控制器或UIView的自定义子类中添加并实现触摸手势吗,ios,objective-c,uiview,uiviewcontroller,uigesturerecognizer,Ios,Objective C,Uiview,Uiviewcontroller,Uigesturerecognizer,我有一个自定义的UIView子类,名为productcardwiew,它非常简单,有一些UIImageViews和UILabels作为它的子视图。我添加了子视图,并设置了-(void)drawRect:(CGRect)rect方法,所有的东西都很好 在我的视图控制器中,我从远程服务器获取一些数据,从而填充应该看到的productCardViews。其目的是当用户点击这些卡中的每一张时,程序会转到一个目标url(每个卡的NSURL属性) 问题是,根据MVC的基础知识,我应该在我的productCa

我有一个自定义的
UIView
子类,名为
productcardwiew
,它非常简单,有一些
UIImageView
s和
UILabel
s作为它的子视图。我添加了子视图,并设置了
-(void)drawRect:(CGRect)rect
方法,所有的东西都很好

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

问题是,根据MVC的基础知识,我应该在我的
productCardView实现内部或在我的视图控制器中向视图添加
UITapgestureRecognitor

如果我要将其添加到视图控制器中,基本上我会将适当的代码放入
viewDidLoad
方法中,在该方法中创建卡的实例,但如果我要在视图本身中实现它,我应该将代码放在哪里?(在
-(void)drawRect:(CGRect)rect
?)

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

所以,这意味着要么

  • 卡感觉到点击并调用其委托(视图控制器)中的函数,然后加载URL
  • 点击手势识别器(在视图控制器中)从卡中获取点击并打开URL
  • 如果卡是在多个位置使用的控件(或者如果屏幕上有多个),则最好将
    productCardView
    设置为
    UIControl
    的子类,而不是
    UIView
    。(
    UIButton
    UISlider
    等…都是
    UIControl
    的子类)

    你不需要做太多的改变,但你可以做一些像

    [productCardView addTarget:self action:@selector(cardTapped:) event:UITouchUpInside];
    
    就像一个按钮


    然后,您在卡视图中处理触摸,并触发事件的操作
    UITouchUpInside

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