本文主要讲解IOS中事件响应链,即事件冒泡机制。做过web开发的同学应该知道js事件冒泡是从主响应元素一层一层的向父级冒泡事件,在ios亦是如此,但是不同是ios中,如果冒泡链中有一方对事件进行响应处理后会截止后续对冒泡行为不同于js会继续往父级冒泡。
事件响应流程图
图中我们可以看到如果UIViewController处理了事件响应,那么就会截止事件对冒泡。
下面我用代码来验证一下。
// 验证ios事件响应链UITapGestureRecognizer* _tap_1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickOnBack)];_tap_1.numberOfTapsRequired = 1;[_back addGestureRecognizer:_tap_1];UITapGestureRecognizer* _tap_2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickOnConter)];[_conter addGestureRecognizer: _tap_2];[_back addSubview:_conter];[self.view addSubview:_back];- (void) clickOnBack {NSLog(@"背景响应点击");
}- (void) clickOnConter {NSLog(@"中间视图被点击");
}
我们点击子视图 _conter可以看到控制输出。