UITapGestureRecognizerselect器,发件人是手势,而不是ui对象

我有一系列使用标签识别的图像。 我已经添加了一个轻拍手势的图像。

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImage:)]; [tableGridImage addGestureRecognizer:singleTap]; tableGridImage.userInteractionEnabled = YES; [singleTap release]; 

这pipe理调用selectImageselect器好,但传递手势作为发件人。 我需要imageview作为发件人,所以我可以得到标签。

关于如何获得imageview和它的标签的任何想法?

我想出了如何获得标签,这是对我来说最重要的问题。 由于手势是发送者,我想出了它所附带的视图是与它一起发送的:

 [(UIGestureRecognizer *)sender view].tag 

我仍然好奇,如果有人能告诉我如何通过UITapGestureRecognizerselect器发送参数。

您可以通过UITapGestureRecognizerselect器发送的唯一参数是UITapGestureRecognizer本身,如下所示:

确保在select器名称后面加上“ ”,就像以前一样:

 UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImage:)]; 

然后添加一个参数selectImage,以便您可以检索视图如下:

 -(void) selectImage:(UITapGestureRecognizer *)gestureRecognizer{ //Get the View UIImageView *tableGridImage = (UIImageView*)gestureRecognizer.view; } 

从@ dysan819答案,我设法得到没有标签的对象。 在我的情况是UILabel

 - (void)labelTap:(id)sender { NSLog(@"tap class: %@", [[(UIGestureRecognizer *)sender view] class]); if ([[(UIGestureRecognizer *)sender view] isKindOfClass:[UILabel class]]) { UILabel *lb = (UILabel*)[(UIGestureRecognizer *)sender view]; NSLog(@"tap: %@", lb.text); } } 

如果你需要不同的处理函数,你可以检查BlocksKit项目,特别是这个文件。 该项目是一个CocoaPods项目,所以你可以很容易地安装到你的工具链。

来自第一个参考代码文件的示例:

 UITapGestureRecognizer *singleTap = [UITapGestureRecognizer recognizerWithHandler:^(id sender) { NSLog(@"Single tap."); } delay:0.18]; [self addGestureRecognizer:singleTap]; 

这可以有效地让您为每个图像轻松地设置一个手势识别器。