将一个NSDictionary作为parameter passing给UITapGestureRecognizer

我想将一个NSArray作为parameter passing给UITapGestureRecognizer并在downloadOptionPressed方法中访问它。 我怎样才能做到这一点 ?

NSArray

 NSArray *parameters = [NSArray arrayWithObjects:currentTrack, nil]; 

创buildUITapGestureRecognizer

 UITapGestureRecognizer *downloadOptionPressed = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(timeFrameLabelTapped:)]; [downloadOption addGestureRecognizer:downloadOptionPressed]; 

downloadOptionPressed方法

 -(void)downloadOptionPressed:(UIGestureRecognizer*)recognizer{ } 

是否有一个原因,你不能存储在拥有视图控制器的信息? 是抽象吗?

您始终可以扩展UITapGestureRecognizer以携带更多数据:

 @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; } 

您可以使用关联的对象将参数与轻击手势实例一起传递。

你可以检查这个objective-c-associated-objects

它会解决你的问题。

有时传递一个索引就足够了,在这种情况下,标签属性视图就是你的盟友。 在下面的例子中,我假装在tableview单元格中添加一个长按。 而一旦事件被触发,我只想知道哪个单元被长时间按下:

  let longPress = UILongPressGestureRecognizer(target: self, action: "longPress:") cell.tag = indexPath.row cell.addGestureRecognizer(longPress) 

 func longPress(guesture: UILongPressGestureRecognizer) { print("\(guesture.view!.tag)")} }