iOS超出父控件范围无法点击问题解决,
投稿于 被查看 16404 次 评论:49
iOS超出父控件范围无法点击问题解决,
目录
- 场景
- 实现思路
- 完整代码
- botView代码
场景
橙色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父控件无法点击的资料请关注3672js教程其它相关文章!
您可能感兴趣的文章:- iOS自定义时间滚动选择控件
- iOS下拉、上拉刷新控件的封装
- Android自定义控件仿ios下拉回弹效果
- Android仿IOS回弹效果 支持任何控件
- Android自定义控件仿iOS滑块SwitchButton
- iOS 简约日历控件EBCalendarView的实现代码
用户评论