Tratando de pasar un argumento a un método en gesto de toque

Tengo una variedad de imágenes que estoy generando de manera programática. En cada image, agrego un gesto de toque. Lo que quiero que suceda es cuando se toca esa image, para que el borde se vuelva negro.

En este momento, estoy tratando de pasar un argumento al método que luego searchá la image en la list de arreglos. Estoy luchando para encontrar la syntax correcta para pasar ese argumento

Aquí está el código. ¡Se agradece cualquier ayuda!

- (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/catprofessionalhttp://sofes.miximages.comhome-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.numberOfTapsRequinetworking = 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; } 

Puede que me falte algo, pero esto debería ser más simple. Tenemos N vistas de imágenes y N reconocimientos de gestos, uno adjunto a cada uno. La firma del método para un gestor reconocedor es así:

 - (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! } 

Tenga en count que no necesitamos referirnos a una label o la position del grifo en absoluto. Ahora, si hubiéramos labeldo las vistas. También podríamos decir:

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

O podríamos decir:

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

Pero, una vez más, es como tomar un taxi de un taxista torcido de París, que te conduce en círculos bizantinos, simplemente subiendo el metro.

Agregue una label al gesto de toque que le dice al índice de la vista de la image, en la acción de toque que obtendría el remitente, desde donde puede get el valor de la label y la vista de la image.

En su código, agregue una label al gestor reconocedor.

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