我有一堆 subview ,它们都有用户交互部分(子部分)并且全屏显示。问题是,如果我触及堆栈顶部的非交互式部分,它就不会将该触摸传播到堆栈的其余部分。我的设置:
View A --view B(全屏容器,本身不是交互式的但有交互式 subview ) ----查看B1(交互式) ---- View B2(交互式) -- View 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 会按预期进行接触。
编辑:结束手动遍历 View 堆栈以仅检查某些 subview 而不是所有 subview :
- (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
View B 中的方法。只有当 B 的 subview 被命中时,您才能让它返回。像这样尝试:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *hitView = [super hitTest:point withEvent:event];
if (hitView == self) {
return nil;
} else {
return hitView;
}
}
关于ios - 通过兄弟 subview 传播触摸事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16067865/