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

Я пытаюсь закрыть всплывающее меню, если пользователь выбирает где-либо, кроме как в пределах самого всплывающего окна. Другими словами, они выбирают фон, всплывающее окно закрывается.

В настоящее время у меня есть 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 - так что это не будет работать.

1 Ответ

0 голосов
/ 28 мая 2011

Вы можете использовать [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];
...