Pase un NSDictionary como parámetro a UITapGestureRecognizer

Quiero pasar un NSArray como parámetro a UITapGestureRecognizer y acceder a él en el método downloadOptionPressed. Cómo puedo hacer esto ?

El NSArray

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

Crear UITapGestureRecognizer

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

El método downloadOptionPressed

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

¿Hay alguna razón por la que no puede almacenar la información en el controller de vista propietaria? ¿Es por abstracción?

Siempre puede extender UITapGestureRecognizer para llevar más datos:

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

Puede usar el object asociado para pasar el argumento junto con la instancia de gesto de toque.

Puede verificar este objective-c-associated-objects

Solucionará tu problema.

A veces con pasar un índice es suficiente, en ese caso, la vista de propiedad de label es tu aliado. En el siguiente ejemplo, fingí agregar una prensa larga en una celda de table. Y una vez que se activó el evento, solo quería saber qué celda se presionó durante mucho time:

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

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