UIView hitTest 阻止点击子视图

Posted

技术标签:

【中文标题】UIView hitTest 阻止点击子视图【英文标题】:UIView hitTest blocks click in child views 【发布时间】:2012-06-07 12:29:47 【问题描述】:

我有以下视图结构

UIView(1)
   |--> UIScrollView
        |-----------> UIView(2)
                        |------> UIButton
UIView(1) 中的

hitTest 已被以下内容覆盖:

- (UIView *)hitTest:(CGPoint) point withEvent:(UIEvent *)event

    /* this view should have only view only: the scroll view */
    UIView * vv = [[self subviews] objectAtIndex:0];

    if ([vv pointInside:point withEvent:event])
    
        UIView *rv = [vv hitTest:point withEvent:event];
        return rv;
    

    if ([self pointInside:point withEvent:event])
    
        return vv;
    
    return nil;

为了捕捉 UIScrollView 拖动到滚动视图本身之外,这是必需的。

问题是当点击 UIButton 时,附加到它的事件不会触发。 hitTest 返回的视图是 UIView(2)

如何让UIButton响应点击事件?

编辑Mundi 的建议下,我将 hitTest 与以下内容进行了交换,并且可以正常工作。当然,我忘了调用 [super hitTest:]。

- (UIView *)hitTest:(CGPoint) point withEvent:(UIEvent *)event

    /* this view should have only view only: the scroll view */
    UIView * scrv = [self findScrollView];

    UIView *superView = [super hitTest:point withEvent:event];
    if (superView == self)
    
        return scrv;
    

    return superView;

【问题讨论】:

【参考方案1】:

在适当的时候打电话给[super hitTest:point withEvent:event]怎么样?

【讨论】:

以上是关于UIView hitTest 阻止点击子视图的主要内容,如果未能解决你的问题,请参考以下文章

让超出父视图范围的子视图响应事件,在UIView范围外响应点击

事件分发机制Hit-Test View的应用(TabBar凸起不能点击解决方法)

iOS:UIView 阻止用户交互,但不是子视图

如何通过让子视图 UIButton 获取新闻事件?

为啥 UIView 的这些自动布局约束会阻止 UIButton 子视图接收触摸事件?

如何使边界外的子视图识别触摸