Я добавил TapGestureRecognizer в свой self.view:

    tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
    tap.numberOfTapsRequired = 1;
    tap.numberOfTouchesRequired = 1;
    [self.view addGestureRecognizer:tap];
    [tap release];

Представление содержит один UIScrollView с изображениями и метками. Я хочу определить, нажимает ли пользователь ярлык или нет.

- (void)singleTap:(UIGestureRecognizer*)gestureRecognizer {

    CGPoint pt = [gestureRecognizer locationInView:self.view];

    UIView *v = [self.view hitTest:pt withEvent:nil];
    if ([v isKindOfClass:[UILabel class]]) {
        NSLog(@"label!");
        return;
    }   
    // else do other stuff if its not a label

Однако я не вижу этикетки! в моем журнале.

4
user317033 30 Авг 2011 в 05:21

2 ответа

Лучший ответ

Я думаю, это потому, что userInteractionEnabled по умолчанию NO на UILabel s. Попробуйте включить это.

РЕДАКТИРОВАТЬ: На самом деле это было предположение, но просто чтобы подтвердить, Apple сообщает о состоянии [UIView hitTest:withEvent:]:

Этот метод игнорирует скрытые объекты просмотра, для которых отключено взаимодействие с пользователем или для которых альфа-уровень меньше 0,01.

5
user244343user244343 30 Авг 2011 в 01:32

Ваши подпредставления, такие как сами ярлыки, фактически скрывают действия пользователя от основного представления.

Почему бы вам не добавить распознаватели жестов к своим ярлыкам. В качестве альтернативы вы можете использовать UIButton для меток.

Или -

Если вы не хотите определять, какая метка была затронута, вы можете добавить невидимое представление (пустое представление, ни скрытое, ни одно с альфа = 0) поверх всех меток и добавить к ним распознаватели жестов.

0
Prince Kumar Sharma 4 Июл 2012 в 21:17