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

Конфликт UITapGestureRecognizer в UIView и UITableView

У меня есть UIView, в который я добавил UITapGestureRecognizer. Внутри этого представления у меня также есть subview, в котором в основном есть своего рода UITableView. Вопрос в том, почему не UITableView распознает нажатие на строку, вместо этого он все время переходит к обработчику распознавателя жестов кран. Почему это и как я могу это решить? Если я установил количество кранов на 2, то он отлично работает. Любая идея о том, как это решить? В принципе, он не вызывает didSelectRowAtIndexPath.

4b9b3361

Ответ 1

Установите cancelsTouchesInView вашего распознавателя на NO. В противном случае он "потребляет" прикосновение для себя и не передает его в виде таблицы. Вот почему событие выбора никогда не происходит.

Ответ 2

Если вы хотите и использовать UITableView и свой UITapGestureRecognizer для получения событий касания, тогда да cancelsTouchesInView = NO будет работать. Если вы хотите, чтобы распознаватель жестов касания не получал сенсорные события, предназначенные для просмотра таблицы, он немного менее прост, но очень полезен.

В основном, когда вы создаете свой распознаватель жестов, вы устанавливаете себя как его делегата. Затем вы реализуете метод делегата gestureRecognizer:shouldReceiveTouch:. Основная реализация может выглядеть так.

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    UITableView *tableView = self.tableView;
    CGPoint touchPoint = [touch locationInView:tableView];
    return ![tableView hitTest:touchPoint withEvent:nil];
}

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