Pass a NSDictionary as parameter to UITapGestureRecognizer

后端 未结 3 1578
悲&欢浪女
悲&欢浪女 2020-12-11 08:31

I want to pass a NSArray as a parameter to UITapGestureRecognizer and access it in downloadOptionPressed method. How can I do this ?

The

相关标签:
3条回答
  • 2020-12-11 08:50

    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)")} }
    
    0 讨论(0)
  • 2020-12-11 08:53

    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.

    0 讨论(0)
  • 2020-12-11 09:05

    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;
    }
    
    0 讨论(0)
提交回复
热议问题