目录
场景
橙色view添加在蓝色view上,满足点击超出蓝色view部分可以响应事件
实现思路
重写底部蓝色view的hitTest方法,从最上层依次遍历子控件,判断触摸点是否在子控件上,在的话就返回子控件的hitTest方法,不在就返回self
完整代码
#import "ViewController.h" #import "BotView.h" @interface ViewController () @property(strong, nonatomic) BotView *botView; @property(strong, nonatomic) UIView *topView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; // Do any additional setup after loading the view. self.botView = [BotView new]; self.topView = [UIView new]; [self.view addSubview:self.botView]; [self.botView addSubview:self.topView]; self.botView.frame = CGRectMake(100, 100, 100, 100); self.topView.frame = CGRectMake(0, 0, 50, 200); self.botView.backgroundColor = [UIColor linkColor]; self.topView.backgroundColor = [UIColor orangeColor]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(topViewClick:)]; [self.topView addGestureRecognizer:tap]; } - (void)topViewClick:(UITapGestureRecognizer *)tap { NSLog(@"点击了顶部view"); } @end
botView代码
#import "BotView.h" @implementation BotView - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ int count = (int)self.subviews.count; for (int i=count-1; i>=0; i--) { UIView *subView = self.subviews[i]; //点击事件作用在子控件上面,返回点击点 CGPoint isPoint = [self convertPoint:point toView:subView]; UIView *subv = [subView hitTest:isPoint withEvent:event]; if (subv) { return subv; } } return self; } @end
以上就是iOS超出父控件范围无法点击问题解决的详细内容,更多关于iOS父控件无法点击的资料请关注其它相关文章!