Transmettre un NSDictionary en tant que paramètre à UITapGestureRecognizer

Je veux passer un NSArray tant que paramètre à UITapGestureRecognizer et y accéder dans la méthode downloadOptionPressed. Comment puis-je faire ceci ?

Le NSArray

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

Création du UITapGestureRecognizer

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

La méthode downloadOptionPressed

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

Y at-il une raison pour laquelle vous ne pouvez pas stocker les informations dans le controller de vue propriétaire? Est-ce pour l'abstraction?

Vous pouvez toujours étendre UITapGestureRecognizer pour transporter plus de données:

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

Vous pouvez utiliser l' object associé pour passer l'argument avec l'instance de geste tap.

Vous pouvez vérifier cet objective-c-associated-objects

Cela résoudra votre problème.

Parfois, en passant un index suffit, dans ce cas la vue des propriétés de l'label est votre allié. Dans l'exemple suivant, j'ai fait semblant d'append une longue pression dans une cellule tableview. Et une fois l'événement déclenché, je voulais juste savoir quelle cellule était pressée depuis longtime:

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

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