iOS: 如何将子视图的触摸事件传递到父视图?

4
我在我的iPhone项目中有以下设置(一个UIButton,其子视图为UIView):
- UIButton       // super-view   <-------|
  |                                <touch-event>
  |_ UIView      // sub-view     ________|

我已经将我的UIButton的动作(touch-up-inside)与IB连接到了我的视图控制器。但不幸的是,由于UIView子视图不响应触摸事件并且不向其父视图转发,因此UIView阻止了OS调用我的UIButton的动作方法。
我该如何将UIView中的动作事件转发到其父视图UIButton上?以便UIButton“认为”它已被触摸,尽管子视图已被触摸。
我已经找到了以下链接,但它们没有帮助我:
- 如何在iOS中将触摸事件发送到父视图? - 如何将触摸事件传递给父视图? 如果有Objective-C的代码示例就更好了!

尝试使用 self.view.layer.zPosition = 1; 或许会有帮助... - Joe Hallenbeck
你使用UIView作为UIButton的子视图到底想要实现什么?使用半透明的UIButton覆盖在你的UIView上是否可行? - Markus Dheus
哦,使用 self.button.layer.zPosition = 1; 也不起作用。我是通过编程方式组合视图的。实例化一个新的 UIButtonUIView,然后使用 [UIButton addSubview:UIView]UIView 添加到 UIButton 中。 - salocinx
@salocinx 如果您使用addSubview方法将子视图添加到按钮中,请尝试使用另一种方法,例如- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview; - (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview; 或 - (void)insertSubview:(UIView *)view atIndex:(NSInteger)index; | 我认为这会对您有所帮助。 - Joe Hallenbeck
1
我目前无法尝试,但你是否尝试在你的UIView中重写(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event并始终返回NO作为答案? - Markus Dheus
显示剩余9条评论
1个回答

4
在您的UIView中重写(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event并始终返回NO应该就可以解决问题了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接