子控件超过父控件点击范围

  • 封装控件层次太多,或子控件超过父控件区域,很容易出现点击没反应!

通用方案

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView *view = [super hitTest:point withEvent:event];
    if (view == nil) {
        for (UIView *subView in self.subviews) {
            CGPoint p = [subView convertPoint:point fromView:self];
            if (CGRectContainsPoint(subView.bounds, p)) {
                view = subView;
            }
        }
    }
    return view;
}


具体方案

/// 超出父控件点击范围
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    CGPoint cartPoint = [self convertPoint:point toView:self.cartButton];
    if ([self.cartButton pointInside:cartPoint withEvent:event]) {
        return self.cartButton;
    } else {
        return [super hitTest:point withEvent:event];
    }
}
  • 关键:[self.cartButton pointInside:cartPoint withEvent:event]
    • 点在不在这个子控件self.cartButton上,不是self
    • 保证其它在self里的子控件也能正常点击


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容