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

UIPanGestureRecognizer в UITableViewCell переопределяет идентификатор распознавания жестов прокрутки UITableView

Я подклассифицировал UITableViewCell, и в этом классе я применяю распознаватель жеста Pan:

UIPanGestureRecognizer *panning = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanning:)];
panning.minimumNumberOfTouches = 1;
panning.maximumNumberOfTouches = 1;
[self.contentView addGestureRecognizer:panning];
[panning release];

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

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

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

- (void)handlePanning:(UIPanGestureRecognizer *)sender {
    NSLog(@"PAN");
}

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

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

4b9b3361

Ответ 1

Вы пытались установить свойство pannings delegate?

panning.delegate = /* class name with the delegate method in it */;

Вам также нужно будет сопоставить этот класс с UIGestureRecognizerDelegate.

Ответ 2

Разбейте подкласс распознавателя жестов панорамирования и сделайте так, чтобы он распознавал только горизонтальное панорамирование. Существует большое видео WWDC 2010 по вопросу о пользовательских распознавателях жестов. На самом деле есть два на эту тему, проверить их на https://developer.apple.com/videos/archive/:

  • Упрощение обработки сенсорных событий с помощью распознавателей жестов
  • Расширенное распознавание жестов

Ответ 3

Добавьте распознаватель жестов в режиме просмотра таблицы. Из этого вы можете получить объект ячейки. Оттуда вы можете управлять функциональностью ячейки. Для каждого жеста будет начатое, измененное, конечное состояние. Итак, сохраните начальную позицию.

    CGPoint beginLocation = [gesture locationInView:tblView]; // touch begin state.

    CGPoint endLocation = [gesture locationInView:tblView]; // touch end state.

Используя эту точку, вы можете получить IndexPath

    NSIndexPath *indexPath = [tblView indexPathForRowAtPoint:beginPoint];

Из этого индексного пути вы можете получить доступ к ячейке.

            UITableViewCell *cell = [tableview cellForRowAtIndexPath : indexPath];

Используя этот объект Cell, вы можете его обработать.

Ответ 4

Вы пытались установить свойство bounces на NO?