2011-01-03 2 views
3

У меня есть группа UIViews, уложенная одна на другую (не вложенная). Я хочу, чтобы все они реагировали на касание, но кажется, что самый верхний вид скрывает взгляды под ним, не позволяя им получать события касания.Получение событий касания на более чем одном UIView одновременно

Сначала я думал, что я бы перехватывать все события касания с верхней точки зрения, а затем вручную вызвать
hitTest или pointInside методы на всех основных взглядов, но я обнаружил, что оба метода являются каким-то частным (может это будет?) и не может быть доступен.

Любые идеи, как это осуществить?

ответ

3

Вы можете проверить, подходит ли для вашего верхнего вида. Если это не так, вы можете вызвать тот же метод своего супервизора. Что-то вроде [self.superview sameMethod: sameParameter].

Ваш верхний вид имеет метод

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 

Внутри этого метода вы делаете вашу логику правильно? Внутри метода вы не можете проверить, если сенсорный получил на свой верхний взгляд с

UITouch *touch = [touches anyObject];
[touch locationInView:self];

И если это не вы передать его же методу SuperView, используя

[self.superview touchesEnded:touches withEvent:event]; 
+0

опечатка: "SuperView" => "SuperView" – Ralphleon

+0

Спасибо. Исправлено. –

3

Прикосновения отправляются на один вид. Затем это представление может передать им цепочку ответчиков. Если вы хотите обрабатывать штрихи в коллекции представлений, вы должны переслать эти события до следующего ответчика и иметь общий родительский элемент из всех (или их контроллер представления, поскольку контроллер также является частью цепи ответчика) обрабатывать эти прикасается.

https://developer.apple.com/library/mac/documentation/General/Devpedia-CocoaApp-MOSX/Responder.html