Возможно ли одновременно получать вызовы 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:)];