封装UIView添加UIButton事件无响应

参考文章:iOS hitTest

自定义封装了UIView,发现内部的

  • UIButton不响应 addTarget:action:forControlEvents:事件;
  • UIImageView开了userInteractionEnabled,加了UITapGestureRecognizer也不响应。

知道是事件传递响应问题,找到了参考文章,根据文章内容重写了

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

在封装的View中实现

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    //需要点击的View(UIImageView-开触摸, UIButton等)
    NSArray *tapViews = @[ view1, view2 ];
    for (UIView *tapView in tapViews) {
        //将当前View的触摸点转换坐标系,转换到tapView的身上,生成一个新的点
        CGPoint newPoint = [self convertPoint:point toView:tapView];
        //判断如果这个新的点是在tapView身上,那么处理点击事件最合适的view就是tapView
        if ([tapView pointInside:newPoint withEvent:event]) {
            return tapView;
        }
    }
    
    return [super hitTest:point withEvent:event];
}

你可能感兴趣的:(封装UIView添加UIButton事件无响应)