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

20

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

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

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

<code>- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}
</code>

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

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

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

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

Ваш Ответ

3   ответа
17

pannings делегировать собственность?

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

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

2

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

    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, вы можете справиться с ним.

Error: User Rate Limit Exceeded
3

чтобы он распознавал только горизонтальное панорамирование. Существует большое видео WWDC по вопросу о пользовательских распознавателях жестов. На самом деле есть два на эту тему, проверьте их.

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

Расширенное распознавание жестов

Error: User Rate Limit Exceeded sooper

Похожие вопросы