Как передать аргумент в действие в действии 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
}