超出父视图范围的按钮点击无响应

touch事件的传递:

在A视图上添加一个B视图,B视图上添加C视图,当我们touch C视图时,系统会从最底层的父视图开始检索,也就是先检索到A视图,然后遍历A视图的子视图,判断touch点在哪个子视图,发现在B视图,于是B视图也会遍历所有的子视图做同样的事情,事件传递到C视图,发现C视图没有子视图,于是由C视图处理touch事件


view的touch事件都会调用- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法,去判断由哪个view去响应事件,所以只需按下面修改

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

UIView * view = [super hitTest:point withEvent:event];

if (!view) {

for (UIView * subView in self.subviews) {

CGPoint p = [subView convertPoint:point fromView:self];//把point坐标转换到subView上

if (CGRectContainsPoint(subView.bounds, p)) {

view = subView;

}

}

}

return view;

}

此方法改变了事件检索的区域(包含了超出父视图范围的那一部分区域)

相关链接:www.cnblogs.com/WZLpq-home/p/5616309.html 


你可能感兴趣的:(超出父视图范围的按钮点击无响应)