我有一堆 UIViews 一个堆叠在另一个(不嵌套)。我希望他们所有人都能做出触摸的反应,但是似乎最高的视图遮盖了下面的视野,从而阻止了他们接受触摸事件。

起初,我以为我会从最高视图中观看所有触摸事件,然后手动致电
hitTest, , 或者 pointInside 所有基础视图的方法,但我发现这两种方法都是私有的(可以吗?) 并且无法访问。

有什么想法如何实现?

有帮助吗?

解决方案

您可以检查触摸是否适合您的最高视图。如果不这样做,您可以调用相同的监督方法。诸如[self.superview samemethod:sameparameter]之类的东西。

您的最高视图有一种方法

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

在该方法中,您正在执行逻辑吗?在方法内部,您无法检查接收到的触摸是否在您的最高视图中

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

如果不这样

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

其他提示

触摸被发送到一个视图。然后,该视图可以选择地将它们传递到响应器链中。如果您想处理视图集合的触摸,则应该让他们将这些事件转发到下一个响应者,并拥有所有这些事件的共同父母(或它们的视图控制器,因为控制器也是响应者链的一部分)来处理这些事件触摸。

https://developer.apple.com/library/mac/documentation/general/devpedia-cocoaapp-mosx/responder.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top