欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

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的实现代码

用户评论