尝试将参数传递给点击手势的方法

Posted

技术标签:

【中文标题】尝试将参数传递给点击手势的方法【英文标题】:Trying to pass an argument to a method on tap gesture 【发布时间】:2014-06-02 00:41:16 【问题描述】:

我有一组以编程方式生成的图像。在每张图片上,我都添加了一个点击手势。我想要发生的是,当点击该图像时,边框变为黑色。

目前,我正在尝试将参数传递给将在数组列表中找到图像的方法。我正在努力寻找正确的语法来传递该参数

这里是代码。任何帮助表示赞赏!

    - (void)viewDidLoad

    [super viewDidLoad];
    int  recents = 10;

    int x = 10;

    _recent.contentSize = CGSizeMake((x*120)+10,100 );
   for(int i = 0; i <=recents; i ++)

  _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(x, 10, 90, 90)];

       [_arrayImages addObject:_imageView];

        NSURL *url = [NSURL URLWithString:@"http://www.vetprofessionals.com/catprofessional/images/home-cat.jpg"];
        NSData *data = [NSData dataWithContentsOfURL:url];
        _imageView.image = [[UIImage alloc] initWithData:data];

        _imageView.layer.masksToBounds = YES;
        _imageView.layer.cornerRadius = 45.0;
        _imageView.layer.borderColor = [UIColor blueColor].CGColor;
        _imageView.layer.borderWidth = 3.0f;
        _imageView.layer.rasterizationScale = [UIScreen mainScreen].scale;
        _imageView.layer.shouldRasterize = YES;
      NSUInteger * count;
        _imageView.tag = i;

       UITapGestureRecognizer *tapGesture =
       [[UITapGestureRecognizer alloc]
        initWithTarget:self action:@selector(didTapImageWithGesture:)];
       tapGesture.numberOfTapsRequired = 1;
       [_imageView addGestureRecognizer:tapGesture];




        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x, 110, 90, 24)];
        label.text = @"Sam Stone";
        label.font = [UIFont fontWithName:@"HelveticaNeue" size:12];
        label.backgroundColor = [UIColor clearColor];
        label.textColor = [UIColor colorWithRed:62/255.0f green:68/255.0f blue:75/255.0f alpha:1.0f];
        label.textAlignment = NSTextAlignmentCenter;
       [_recent addSubview:_imageView];
       [_recent addSubview:label];
        [_arrayImages addObject:_imageView];
           x=x+110;
    



- (void)didTapImageWithGesture:(id)sender 

    UIImageView *image;
    image = [_arrayImages objectAtIndex:((UIGestureRecognizer *)sender).view.tag];
    image.layer.borderColor = [UIColor blackColor].CGColor;


【问题讨论】:

【参考方案1】:

我可能遗漏了一些东西,但这应该更简单。我们有 N 个图像视图和 N 个手势识别器,每个都附加一个。手势识别器的方法签名是这样的:

- (void)didTapImageWithGesture:(UIGestureRecognizer *)gr 

    // want the view?
    UIImageView *imageView = (UIImageView *)gr.view;

    // want the image?
    UIImage *image = imageView.image;

    // want the index of the imageView in the array?
    // not sure why you'd want this. all it tells you is the z-order
    NSInteger index = [_arrayImages indexOfObject:imageView];

    // want the view again?
    UIImageView *imageViewAgain = _arrayImages[index];
    // but why?  you already have the view

    // does
    if (imageViewAgain == imageView) // of course it's true!

请注意,我们根本不需要引用标签或点击的位置。现在,如果我们标记了视图。我们也可以说:

NSInteger tag = gr.view.tag;
UIImageView *imageViewAgainAgain = _arrayImages[tag];

或者我们可以说:

UIImageView *imageViewAgainAgainAgain = [gr.view.superview viewWithTag:tag];

但是,这就像从一个不正经的巴黎出租车司机那里搭便车,带着你在拜占庭的圈子里,只是跑了米。

【讨论】:

【参考方案2】:

在点击手势中添加一个标签,告诉图像视图索引,在点击动作中您将获得发送者,您可以从中获取标签值,从而获得图像视图。

在您的代码中,为手势识别器添加一个标签。

   UITapGestureRecognizer *tapGesture =
   [[UITapGestureRecognizer alloc]
    initWithTarget:self action:@selector(didTapImageWithGesture:)];
   tapGesture.numberOfTapsRequired = 1;
   tapGesture.tag = i; 
   [_imageView addGestureRecognizer:tapGesture];

【讨论】:

我已将上面的代码编辑为我如何解释这两个答案。任何想法为什么这不起作用? 更新了我的答案以反映您的问题。

以上是关于尝试将参数传递给点击手势的方法的主要内容,如果未能解决你的问题,请参考以下文章

将多个参数传递给后端 API reactjs

将参数传递给自定义 save() 方法

将参数传递给 mat-dialog open 方法

java中,如何用POST方法将参数传递给第三方网站

jquery 1.9.1 .trigger() 没有将参数传递给点击处理程序

将参数传递给要装饰的类方法的装饰器