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凸起不能点击解决方法)