Селектор UITapGestureRecognizer, отправитель - это жест, а не объект ui
У меня есть серия изображений, которые я идентифицирую с помощью их тега. Я добавил один жестов к изображениям.
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImage:)];
[tableGridImage addGestureRecognizer:singleTap];
tableGridImage.userInteractionEnabled = YES;
[singleTap release];
Это позволяет вызвать селектор selectImage в порядке, но передает жест в качестве отправителя. Мне нужно изображение в качестве отправителя, чтобы я мог получить тег.
Любые идеи о том, как я могу получить изображение и тег?
Ответы
Ответ 1
Я понял, как получить тег, который был для меня самой важной частью вопроса. Поскольку этот жест является отправителем, я понял, что его прикрепленное к нему сообщение отправлено вместе с ним:
[(UIGestureRecognizer *)sender view].tag
Мне все еще интересно, может ли кто-нибудь сказать мне, как отправить аргумент с помощью селектора UITapGestureRecognizer.
Ответ 2
Единственным аргументом, который вы можете отправить через селектор UITapGestureRecognizer, является сам UITapGestureRecognizer, как показано ниже:
Обязательно поставьте ":" после имени селектора, как вы это делали ранее:
UITapGestureRecognizer *singleTap =
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImage:)];
Затем добавьте параметр selectImage, чтобы вы могли получить представление как показано ниже:
-(void) selectImage:(UITapGestureRecognizer *)gestureRecognizer{
//Get the View
UIImageView *tableGridImage = (UIImageView*)gestureRecognizer.view;
}
Ответ 3
Из ответа @dysan819 мне удается получить объект без тега. В моем случае UILabel
.
- (void)labelTap:(id)sender {
NSLog(@"tap class: %@", [[(UIGestureRecognizer *)sender view] class]);
if ([[(UIGestureRecognizer *)sender view] isKindOfClass:[UILabel class]]) {
UILabel *lb = (UILabel*)[(UIGestureRecognizer *)sender view];
NSLog(@"tap: %@", lb.text);
}
}
Ответ 4
Если вам нужна четкая функциональность для обработчика, вы можете проверить проект BlocksKit и этот файл в частности. Проект представляет собой проект CocoaPods, поэтому вы можете легко его установить в свою инструментальную цепочку.
Пример из первого ссылочного файла кода:
UITapGestureRecognizer *singleTap = [UITapGestureRecognizer recognizerWithHandler:^(id sender) {
NSLog(@"Single tap.");
} delay:0.18];
[self addGestureRecognizer:singleTap];
Это может эффективно позволить вам легко настроить распознаватель жестов для каждого изображения.