I want to pass a NSArray
as a parameter to UITapGestureRecognizer
and access it in downloadOptionPressed method. How can I do this ?
The
Sometimes with passing an index is enough, in that case the tag property view is your ally. In the following exampled I pretended to add a long press into a tableview cell. And once the event was triggered, I just wanted to know which cell was long pressed:
let longPress = UILongPressGestureRecognizer(target: self, action: "longPress:")
cell.tag = indexPath.row
cell.addGestureRecognizer(longPress)
...
func longPress(guesture: UILongPressGestureRecognizer) {
print("\(guesture.view!.tag)")} }
You can use associated object to pass argument along with tap gesture instance.
You can check this objective-c-associated-objects
It will solve your problem.
Is there a reason you can't store the information in the owning view controller? Is it for abstraction?
You can always extend UITapGestureRecognizer to carry more data:
@interface UserDataTapGestureRecognizer : UITapGestureRecognizer
@property (nonatomic, strong) id userData;
@end
@implementation UserDataTapGestureRecognizer
@end
...
UserDataTapGestureRecognizer *downloadOptionPressed =
[[UserDataTapGestureRecognizer alloc] initWithTarget:self
action:@selector(timeFrameLabelTapped:)];
downloadOptionPressed.userData = parameters;
...
- (void)downloadOptionPressed:(UserDataTapGestureRecognizer *)recognizer {
NSArray *parameters = recognizer.userData;
}