UITapGestureRecognizer选择器,发送者是手势,而不是UI对象。

49

我有一系列的ImageView,我是通过它们的标签来进行识别的。我已经给这些图片添加了单击手势。

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

这段代码可以成功调用selectImage函数,但是它将gesture作为发送方传递。我需要以imageview作为发送方,这样我就可以获取tag了。

你有什么好的想法来获取imageview及其tag吗?

4个回答

54

我找到了获取标签的方法,这对我来说是问题中最重要的部分。因为手势是发送者,所以我发现与其相关联的视图也随之发送:

[(UIGestureRecognizer *)sender view].tag

我仍然很好奇是否有人可以告诉我如何通过UITapGestureRecognizer选择器发送参数。


1
我仍然很好奇是否有人可以告诉我如何通过UITapGestureRecognizer选择器发送参数。我也是。 - Adam Waite
1
Adam,我非常确定这是唯一的方法,通过UIImageView上的标签。你知道,使用图像本身的标签有一些优点:比如说,如果你有多个手势识别器,或者你以其他方式获取图像信息,那么它在图像上而不是在G.R.上是很好的。这是一个很棒的提示,感谢你的问题/答案! - Fattie
谢谢!这也帮助了我! - Chen Li Yong

28
你可以通过UITapGestureRecognizer选择器发送的唯一参数是其自身,如下所示:
请确保在选择器名称后面加上“:”,就像之前所做的那样:
UITapGestureRecognizer *singleTap = 
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImage:)];

然后添加一个参数到selectImage函数中,以便可以按以下方式检索View:

-(void) selectImage:(UITapGestureRecognizer *)gestureRecognizer{

    //Get the View
    UIImageView *tableGridImage = (UIImageView*)gestureRecognizer.view;
}

2
感谢你的解释,Samidjo!另外,我发现在视图上添加自己的属性很有用 - @property(weak, nonatomic) id relatedObject。这样,通过将其分配给视图的属性,您可以有效地传递任何您想要的内容! :D - JRG-Developer

4
从 @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);
    }
}

2
如果您需要处理程序的不同功能,可以查看BlocksKit项目和特定的文件this。该项目是一个CocoaPods项目,因此您可以轻松地将其安装到您的工具链中。
第一个引用代码文件的示例:
UITapGestureRecognizer *singleTap = [UITapGestureRecognizer recognizerWithHandler:^(id sender) {
     NSLog(@"Single tap.");
 } delay:0.18];
 [self addGestureRecognizer:singleTap];

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接