我有一个视图被添加为viewController的子视图。 这个子视图和viewController都实现了这个方法
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
我发现当我点击subView时,这两种方法都会被调用。
我想只调用subview的touchesEnded
。如何很好地实现这一目标? (不要在其中添加手势)
在touchesEnded
中,apple doc说“如果你在不调用super(常用模式)的情况下重写此方法,你还必须覆盖其他方法来处理触摸事件,如果只是作为存根(空)实现“。
另一种方法是什么?
答案 0 :(得分:1)
你很亲密!
要防止将触摸事件传递给superview,您应该覆盖触摸事件的所有方法。将所有触摸事件方法添加到子视图中,然后就可以了。
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
}
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
}
- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
}
答案 1 :(得分:0)
而不是实现子视图的touchesDidEnd
为什么不在superview touchesDidEnd
这样的事情中完成整个工作
if([touch anyObject].view == subview){
return;
}
通过这种方式,您可以了解触摸是否最初来自子视图或超级视图。
备用:你可以在superview和subview中实现这两种方法,但是像上面的代码一样,你可以在superview中返回调用,如果它与之交互的视图是子视图,并保持使用子视图中的触摸代码
如果你想要一个不同的意见,请告诉我们你在尝试什么,以便我们能够给出相应的答案