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)")} }