Если вы хотите, чтобы оба ваши UITableView
и ваши UITapGestureRecognizer
принимали события касания, тогда да, cancelsTouchesInView = NO
будет работать.Если вы хотите, чтобы распознаватель жестов касания не получал события касания, предназначенные для табличного представления, это немного менее просто, но очень выполнимо.
В основном, когда вы создаете распознаватель жестов, вы устанавливаете self в качестве его делегата.Затем вы реализуете метод делегата 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
получить касание.