Предотвращение касаний от обработки родительским представлением таблицы - PullRequest
1 голос
/ 22 октября 2009

У меня есть пользовательская ячейка табличного представления, которая обрабатывает жесты пользователя. Однако, даже если для меня установлено значение exclusiveTouch YES, в тот момент, когда значение y изменяется на любую величину, начинается сколлинг, даже если я нахожусь в процессе обработки событий касания. Как предотвратить прокрутку таблицы при обработке событий касания в ячейке?

Ответы [ 2 ]

2 голосов
/ 23 октября 2009

Итак, правильный способ условной обработки, к сожалению, зависит от superView. Для некоторых представлений и событий (например, UITableView select) вам нужно переслать touchesBegan: event на nextResponder, отследить ваш жест, переслать touchesMoved: события на nextResponder до тех пор, пока вы не обнаружите свой жест, и когда он сработает, вы отправите touchesCancelled: к следующему ответчику и скрыть все остальные события от следующего респондента (touchesEnded: и touchesCancelled :) до тех пор, пока вы не получите touchchesEnded: или touchesCancelled: самостоятельно.

В UIScrollView, однако, есть особый случай, когда он не зависит от того, чтобы быть nextResponder для обработки событий прокрутки (прокрутка, скорее всего, обнаруживается в таких методах, как hitTest :). Поэтому независимо от того, что вы делаете в отношении пересылки или событий, прокрутка все равно происходит. Единственный способ предотвратить прокрутку - это отключить прокрутку в родительском представлении, как только ваш жест будет обнаружен, а затем снова включить прокрутку, когда она закончится или будет отменена.

1 голос
/ 22 октября 2009

Я думаю, что вам нужно создать подкласс UITableView и реализовать hitTest: withEvent: Вот как я сделал это для пользовательской ячейки, которую я построил для перемещения влево и вправо внутри ячейки:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    NSIndexPath *indexPath = [self indexPathForRowAtPoint:point];
    UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath];

    if ([cell isKindOfClass:[MyCustomCell class]])
    {
        return cell;
    }

    return [super hitTest:point withEvent:event];
}
...