UITableView didSelectRowAtIndexPath и UITapGestureRecognizer конфликтуют - PullRequest
0 голосов
/ 25 января 2012

Итак, у меня есть представление, в котором оно имеет какое-то представление с UITapGestureRecognizer на изображении, и у меня есть представление таблицы. Проблема заключается в том, что, когда я нажимаю на ячейку табличного представления и за ней находится представление, у которого есть распознаватель жестов касания, действие этого UITapGestureRecognizer также выполняется. Вопрос в том, как это отключить, чтобы при выполнении табличного представления didSelectRowAtIndexPath действие распознавателя жестов касания не выполнялось? Кстати, я установил:

 tapGestureRecognizer.cancelsTouchesInView = NO;

Я также пытался сделать:

- (IBAction) handleTapGesture:(UITapGestureRecognizer *) sender {

    if ([sender.view isKindOfClass:[TileViewController class]]){
        NSLog(@"CANCEL THIS");
    }

   if ([sender.view isKindOfClass:[UITableView class]]){
        NSLog(@"CANCEL THIS");
    }
}

но это никогда не входило в оператор if

Ответы [ 3 ]

2 голосов
/ 25 января 2012

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

[myImage addGestureRecognizer:tapGestureRecognizer];
2 голосов
/ 13 августа 2012

Вы также можете управлять этим, реализуя gestureRecognizer:shouldReceiveTouch: и используя класс представления, чтобы определить, какое действие предпринять.Преимущество этого подхода состоит в том, что он не маскирует ответвления в области, непосредственно окружающей таблицу (представления этих областей все еще происходят от экземпляров UITableView, но они не представляют ячейки).

Предупреждение: есть предположение, что Apple не изменит имя класса.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    return ![NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"];
}
0 голосов
/ 25 января 2012

Установить

yourView.userInteractionEnabled = NO;

в представлении, которое вы помещаете в ячейку таблицы. Это должно отменить касания всех дочерних представлений. Вы, вероятно, можете легко установить его в своей функции cellForRowAtIndexPath.

...