Предотвращение касаний от обработки родительским представлением таблицы

StackOverflow https://stackoverflow.com/questions/1608465

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

Я думаю, что вам нужно создать подкласс 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];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top