Ios 将NSDictionary作为参数传递给UITapGestureRecognizer

Ios 将NSDictionary作为参数传递给UITapGestureRecognizer,ios,objective-c,nsarray,uitapgesturerecognizer,Ios,Objective C,Nsarray,Uitapgesturerecognizer,我想将NSArray作为参数传递给uitagesturerecognizer,并通过downloadpoptionpressed方法访问它。我该怎么做 NSArray NSArray *parameters = [NSArray arrayWithObjects:currentTrack, nil]; 创建UITapGestureRecognitor UITapGestureRecognizer *downloadOptionPressed = [[UITapGestureRecognizer

我想将
NSArray
作为参数传递给
uitagesturerecognizer
,并通过downloadpoptionpressed方法访问它。我该怎么做

NSArray

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

UITapGestureRecognizer *downloadOptionPressed = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(timeFrameLabelTapped:)];
    [downloadOption addGestureRecognizer:downloadOptionPressed];
按下
下载选项
方法

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

}

是否存在无法将信息存储在所属视图控制器中的原因?是抽象的吗

您始终可以扩展UITapgestureRecognitor以承载更多数据:

@interface UserDataTapGestureRecognizer : UITapGestureRecognizer
@property (nonatomic, strong) id userData;
@end

@implementation UserDataTapGestureRecognizer
@end


您可以使用关联对象传递参数和点击手势实例

你可以查一下


它将解决您的问题。

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

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


难道你不能创建一个属性并访问它吗?然后符合
NSArray
NSDictionary
?正如你所注意到的,选择器被交给了这个手势。为什么不创建一个方法可以访问的数组呢?一个选择是将其设置为属性。但我可能还需要传递更多的参数。制作一个包含数组和任何其他选项并设置为属性的选项对象,然后从方法访问它。这是一个非常棒的、很少讨论的功能!比子类化干净得多。
- (void)downloadOptionPressed:(UserDataTapGestureRecognizer *)recognizer {
    NSArray *parameters = recognizer.userData;
}
    let longPress = UILongPressGestureRecognizer(target: self, action: "longPress:")
    cell.tag = indexPath.row
    cell.addGestureRecognizer(longPress)
func longPress(guesture: UILongPressGestureRecognizer) {
    print("\(guesture.view!.tag)")} }