Как обнаружить «Touch Down» в суперпредставлении UIScrollView? - PullRequest
7 голосов
/ 08 апреля 2010

У меня есть UIView, который содержит UIScrollView, и я хочу иметь возможность захватывать событие «Touch Down» в UIView в любое время, когда пользователь нажимает на UIScrollView.

Я пытался включить все обработчики touchesBegan / Ended / Cancelled в мой UIViewController, но ни один из них не срабатывает при нажатии внутри UIScrollView, содержащегося в основном UIView.

Каков наилучший способ сделать это?

Ответы [ 4 ]

2 голосов
/ 08 апреля 2010

В UIView реализует прикосновения Beg:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // assign a UITouch object to the current touch
    UITouch *touch = [[event allTouches] anyObject];

    // if the view in which the touch is found is myScrollView
    // (assuming myScrollView is the UIScrollView and is a subview of the UIView)
    if ([touch view] == myScrollView) {
        // do stuff here
    }
}

Примечание: убедитесь, что для userInteractionEnabled установлено значение YES в UIView.

1 голос
/ 23 февраля 2012

Вы также можете добавить распознаватель жестов к своему суперпредставлению. Например, жест касания, если вам нужно активировать / деактивировать такие вещи, как кнопки, перекрывающие вид прокрутки:

self.tap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)] autorelease];
tap.numberOfTapsRequired = 1;

["containerView" addGestureRecognizer:tap];

Жесты сохраняют взаимодействие вида прокрутки

1 голос
/ 08 апреля 2010

Вы также можете реализовать hitTest:withEvent: в своем подклассе UIView. Этот метод вызывается, чтобы определить, какое подпредставление должно получить сенсорное событие. Так что здесь вы можете либо просто отслеживать все события, проходящие через ваше представление, либо скрывать некоторые события из подпредставлений. В этом случае вам может не потребоваться отключать взаимодействие с пользователем для просмотра прокрутки.

Подробнее об этом методе см. В UIView справочнике классов.

0 голосов
/ 08 апреля 2010

Вам необходимо отключить взаимодействие с пользователем в виде прокрутки как таковом ...

scrollView.userInteractionEnabled = NO;

После отключения супервизор UIScrollView получает событие touchesBegan.

...