48

我有一系列使用他们的标签识别的图像视图。我已向图像添加了单击手势。

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

这成功地调用了 selectImage 选择器,但将手势作为发送者传递。我需要 imageview 作为发件人,这样我才能得到标签。

关于如何获取图像视图及其标签的任何想法?

4

4 回答 4

54

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

[(UIGestureRecognizer *)sender view].tag

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

于 2011-05-22T02:13:07.823 回答
28

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

确保像以前一样在选择器名称后面加上“ : ”:

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

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

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

    //Get the View
    UIImageView *tableGridImage = (UIImageView*)gestureRecognizer.view;
}
于 2012-07-11T09:40:51.490 回答
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);
    }
}
于 2015-09-09T03:07:05.297 回答
2

如果您需要处理程序的不同功能,您可以查看 BlocksKit 项目,特别是这个文件。该项目是一个CocoaPods项目,因此您可以轻松地将其安装到您的工具链中。

第一个引用的代码文件中的示例:

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

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

于 2012-10-05T13:52:03.623 回答