我有一堆UIViews
堆叠在一起(不是嵌套)。我希望他们都对触摸作出反应,但似乎最顶层的视图遮挡了它下面的视图,阻止它们接收触摸事件。
起初我以为我会用最顶层的视图捕捉所有触摸事件,然后手动调用
所有底层视图上的hitTest
或pointInside
方法,但我发现这两种方法都是私有的(可能是吗?)并且无法访问。
任何想法如何实现它?
答案 0 :(得分: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];
答案 1 :(得分:3)
触摸被发送到单个视图。然后,该视图可以选择性地将它们传递给响应者链。如果你想处理一组视图的触摸,你应该让他们将这些事件转发到下一个响应者并且拥有所有这些事件的共同父级(或者他们的视图控制器,因为控制器也是响应者链的一部分)处理那些触摸。
https://developer.apple.com/library/mac/documentation/General/Devpedia-CocoaApp-MOSX/Responder.html