我有一堆子视图,它们都有用户交互部分(子级)并且全屏。问题是,如果我触及堆栈顶部的非交互式部分,它不会将该触摸传播到堆栈的其余部分。我的设置:
视图A
--view B(全屏容器,本身不是交互式的,但具有交互式子视图)
----视图B1(互动)
----查看B2(互动)
--视图C(与B相同)
----查看C1(交互)
----查看C2(交互式)
B和C都是全屏,但B1/B2/C1/C2只是屏幕的一小部分。
[a addSubview:b];
[a addSubview:c];
如果我触摸 C1/C2 之外的任何内容,我希望触摸事件检查它是否击中 B (B1/B2) 内部的任何位置,但它只是返回到 A,然后返回到 A 的父级。是否有可能做到这一点?如果我在 C 上设置 userInteractionEnabled NO,但在 C1/C2 上设置 YES,它也不会得到任何对内部调用的调用,尽管在这种情况下,B 会按预期获得触摸。
编辑:最终手动遍历视图堆栈以仅检查某些子视图而不是全部:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (self != self.topCustomViewsContainer) {
for (UIView *v in self.createdSubviews) {
CGPoint newPoint = point;
newPoint.x -= v.frame.origin.x;
newPoint.y -= v.frame.origin.y;
UIView *hit = [v hitTest:newPoint withEvent:event];
if (hit)
return hit;
}
return nil;
}
return [super hitTest:point withEvent:event];
}
一种可能性是覆盖
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
视图 B 中的方法。只有当 B 的子视图被命中时,才可以使其返回。试试这样:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *hitView = [super hitTest:point withEvent:event];
if (hitView == self) {
return nil;
} else {
return hitView;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)