UITapGestureRecognizer选择器,sender是手势,而不是ui对象

时间:2011-05-21 14:07:51

标签: objective-c ios selector gestures

我有一系列使用标签识别的图像视图。我为图像添加了一个轻击手势。

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

这设法调用selectImage选择器ok,但将手势作为发送者传递。我需要将imageview作为发件人,这样我才能获得标签。

关于如何获取imageview及其标签的任何想法?

4 个答案:

答案 0 :(得分:53)

我想出了如何获取标签,这对我来说是问题中最重要的部分。由于手势是发件人,我发现附加的视图随之发送:

[(UIGestureRecognizer *)sender view].tag

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

答案 1 :(得分:26)

您可以通过UITapGestureRecognizer选择器发送的唯一参数是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 :(得分: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);
    }
}

答案 3 :(得分:2)

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

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

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

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