Как передать аргумент в действие в действии UIGestureRecognizer initWithTarget

Я использую код ниже

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(processTap)];

- (void) processTap
{
//do something
}

Но мне нужно отправить данные функции processTap. Есть ли способ сделать это?

Ответ 1

Пример:

UIImageView *myPhoto = [[UIImageView alloc] initWithImage: [UIImage imageNamed:@"tab-me-plese.png"]];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(processTap:)];

[myPhoto setTag:1]; //set tag value
[myPhoto addGestureRecognizer:tap];
[myPhoto setUserInteractionEnabled:YES];

- (void)processTap:(UIGestureRecognizer *)sender
{
    NSLog(@"tabbed!!");
    NSLog(@"%d", sender.view.tag);    
}

Ответ 2

Хороший ответ на аналогичный вопрос в iOS - UITapGestureRecognizer - Селектор с аргументами, но если вы хотите передать данные, которые вы не хотите прикреплять к я рекомендую создать вторую функцию, которая имеет доступ к необходимым вам данным. Например:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(passDataToProcessTap)];

- (void)passDataToProcessTap {
    [self processTapWithArgument:self.infoToPass];
    // Another option is to use a static variable,
    // Or if it not dynamic data, you can just hard code it
}

- (void) processTapWithArgument:(id)argument {
    //do something
}