Возможно ли одновременно получать вызовы UITapGestureRecognizer в 2 классах
Я хочу вызвать действие в двух классах (супервизор и полноэкранный просмотр), когда пользователь один раз удаляет экран. Но когда я добавляю UITapGestureRecognizer в subview, тот, который добавлен в супервизор, переопределяется. Можно ли добавить UITapGestureRecognizer в subview без переопределения UITapGestureRecognizer, добавленного в супервизор?
Если да, то как я могу это сделать?
Спасибо!
Edit:
Из моего главного viewController "MyToolBerController", я добавляю subview из другого viewController следующим образом:
PhotoViewController *photoViewController = [[PhotoViewController alloc] initWithNibName:@"PhotoViewController" bundle:nil];
myPhotoView = photoViewController.view;
[self.view addSubview:myPhotoView];
Я добавляю GestureRecognizer в MyToolBerController следующим образом:
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTapFrom:)];
[singleTap setNumberOfTapsRequired:1];
singleTap.delegate = self;
[myPhotoView addGestureRecognizer:singleTap];
[singleTap release];
Все это работает отлично, но мне нужно вызвать метод в классе PhotoViewController при прослушивании представления, а также в классе MyToolBerController.
Когда я добавляю еще один UITapGestureRecognizer в photoViewController, он переопределяет UITapGestureRecognizer, добавленный в superView.
Ответы
Ответ 1
В вашем методе выбора распознавателя жестов передайте информацию в подвью. Нет необходимости иметь несколько распознавателей жестов для одного и того же жеста. Что-то вроде:
- (IBAction)handleSingleDoubleTap:(UIGestureRecognizer *)sender
{
CGPoint tapPoint = [sender locationInView:sender.view.superview];
UIView *subview = [parentView viewWithTag:100];
[subview doSomethingWithPoint:tapPoint];
}
Это, разумеется, означает, что вашему подсмотру, которому необходимо быть уведомленным, должен быть присвоен тег 100 либо в Interface Builder, либо в коде при загрузке контроллера представления.
Обновление по коду Ионы:
Поэтому вместо сохранения представления сохраните контроллер вида:
PhotoViewController *photoViewController = [[PhotoViewController alloc] initWithNibName:@"PhotoViewController" bundle:nil];
self.myPhotoViewController = photoViewController;
Это означает, что вам нужно объявить его таким образом в заголовке MyToolbarController:
@property (nonatomic, retain) PhotoViewController *myPhotoViewController;
Затем, когда ваш селектор жестов будет вызван, передайте сообщение вместе с контроллером просмотра, который вы сохранили. Что-то вроде:
- (IBAction)handleSingleTapFrom:(UIGestureRecognizer *)sender
{
CGPoint tapPoint = [sender locationInView:sender.view.superview];
[myPhotoViewController doSomethingWithPoint:tapPoint];
}
Конечно, метод -doSomethingWithPoint: это, например, только. Вы можете назвать и создать любой метод, который вы хотите, который принимает любой параметр, который вы хотите передать в PhotoViewController.
Сообщите мне, если вам нужно дополнительное разъяснение.
Ответ 2
распознаватели жестов могут отправлять несколько действий, когда происходит жест. Вы можете добавить subview в качестве другой цели распознавателя жестов и использовать только один экземпляр UITapGestureRecognizer:
[tapRecognizer addTarget:theSubview action:@selector(whatever:)];