UITapGestureRecognizer селектор, отправитель - это жест, а не объект пользовательского интерфейса - PullRequest
47 голосов
/ 21 мая 2011

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

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

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

Есть идеи, как получить изображение и его тег?

Ответы [ 4 ]

54 голосов
/ 22 мая 2011

Я понял, как получить метку, которая была для меня самой важной частью вопроса.Поскольку этот жест является отправителем, я выяснил, что представление, к которому он прикреплен, отправляется вместе с ним:

[(UIGestureRecognizer *)sender view].tag

Мне все еще интересно, может ли кто-нибудь сказать мне, как отправить аргумент через селектор UITapGestureRecognizer.

27 голосов
/ 11 июля 2012

Единственный аргумент, который вы можете отправить через селектор UITapGestureRecognizer, - это сам UITapGestureRecognizer, как показано ниже:

Обязательно ставьте «: » после имени селектора, как вы делали это ранее:

UITapGestureRecognizer *singleTap = 
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImage:)];

Затем добавьте параметр к selectImage, чтобы вы могли получить представление следующим образом:

-(void) selectImage:(UITapGestureRecognizer *)gestureRecognizer{

    //Get the View
    UIImageView *tableGridImage = (UIImageView*)gestureRecognizer.view;
}
4 голосов
/ 09 сентября 2015

Из ответа @ 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);
    }
}
2 голосов
/ 05 октября 2012

Если вам нужна отдельная функциональность для обработчика, вы можете проверить проект BlocksKit и этот файл, в частности.Проект представляет собой проект CocoaPods , так что вы можете легко установить его в свой набор инструментов.

Пример из первого ссылочного файла кода:

UITapGestureRecognizer *singleTap = [UITapGestureRecognizer recognizerWithHandler:^(id sender) {
     NSLog(@"Single tap.");
 } delay:0.18];
 [self addGestureRecognizer:singleTap];

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

...