You can extend a UITapGestureRecognizer for holding more data:
// MYTapGestureRecognizer.h
@interface MYTapGestureRecognizer : UITapGestureRecognizer
@property (nonatomic, strong) NSString *data;
@end
// MYTapGestureRecognizer.m
@implementation MYTapGestureRecognizer
@end
// =====================
....
MYTapGestureRecognizer *singleTap = [[MYTapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)];
singleTap.data = @"Hello";
.....
// ====================
-(void)tapDetected:(UITapGestureRecognizer *)tapRecognizer {
MYTapGestureRecognizer *tap = (MYTapGestureRecognizer *)tapRecognizer;
NSLog(@"data : %@", tap.data);
}