Подтвердить что ты не робот

Селектор UITapGestureRecognizer, отправитель - это жест, а не объект ui

У меня есть серия изображений, которые я идентифицирую с помощью их тега. Я добавил один жестов к изображениям.

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImage:)];
[tableGridImage addGestureRecognizer:singleTap];
tableGridImage.userInteractionEnabled = YES;
[singleTap release];

Это позволяет вызвать селектор selectImage в порядке, но передает жест в качестве отправителя. Мне нужно изображение в качестве отправителя, чтобы я мог получить тег.

Любые идеи о том, как я могу получить изображение и тег?

4b9b3361

Ответ 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];

Это может эффективно позволить вам легко настроить распознаватель жестов для каждого изображения.