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];
这可以有效地让您为每个图像轻松地设置一个手势识别器。