Обнаружение касаний с помощью составных представлений и передача событий касания из UIScrollView

Я пытаюсь закрыть всплывающее меню, если пользователь выбирает где-нибудь, ЗА ИСКЛЮЧЕНИЕМ границ самого всплывающего окна. Другими словами выбирают фон, всплывающее окно закрывается.

В настоящее время у меня есть RootViewController, который загружает UIView с кучей других элементов пользовательского интерфейса. В какой-то момент отображается всплывающее (настраиваемое) меню - это отдельный UIViewController со связанным .xib. Его загружают на экран:

    SectionsChooserViewController *cv = [[SectionsChooserViewController alloc] initWithNibName:@"SectionsChooserViewController" bundle:[NSBundle mainBundle]];
    cv.view.frame = CGRectMake(584, 391, 314, 346);
    cv.delegate = self;     

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

Если я не обрабатываю касания в «SectionsChooserViewController» и вместо этого реализую touchesBegan в rootViewController (который загружает «SectionsChooser ...»), он не вызывается для 90% представления, потому что UIScrollView, который у меня есть, кажется чтобы зарегистрировать прикосновение, а не передать его дальше.

Есть ли способ заставить UIScrollView передать событие касания?

Изменить: по крайней мере, я думаю, что UIScrollView принимает событие касания. Я не уверен - у меня на странице около 20 элементов управления пользовательским интерфейсом.

Изменить: Хорошо, это UIScrollView. Если я отключу взаимодействие с обоими scrollView, UIView получит прикосновения, но это сломает UIScrollViews - так что это не сработает.


person mr-sk    schedule 27.05.2011    source источник


Ответы (1)


Возможно, вы сможете использовать [super touchesBegan:withEvent:], чтобы решить проблему.

В зависимости от того, что вы пытаетесь сделать, вы можете использовать UIGestureRecognizer для захвата событий касания.

UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                        initWithTarget:self action:@selector(handleDoubleTap:)];

doubleTapGestureRecognizer.numberOfTapsRequired = 2; //change value to 1 for single taps
[self addGestureRecognizer:doubleTapGestureRecognizer];
person dbslone    schedule 27.05.2011