IOS事件传递和处理中的细节问题
1. 事件处理分两步:
1)寻找合适的相应对象,这个时候是从父控件到子控件的;
2)对事件进行处理 由子空间到父控件
注意点:如果连个视图是同级的关系,那么先加到View上的视图是后相应的(如果利用StroyBoard添加View,也是后先加上的后响应)。此时可以重写父类的Point:inside 和 Hit:test方法来试验
1 -(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event 2 { 3 4 5 UIView * resultView = [super hitTest:point withEvent:event]; 6 7 NSLog(@"%s",__func__); 8 return resultView; 9 10 } 11 -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 12 { 13 14 NSLog(@"%s",__func__); 15 NSLog(@"Red==%d",[super pointInside:point withEvent:event]); 16 // return [super pointInside:point withEvent:event]; 17 return NO; 18 19 }
这样就可以看到如果是绿色的view先添加,那么会先调用红色的point Inside方法,如果这个时候把红色View上的所有View都重写这个方法,并且返回YES,那么绿色View的touch事件就不会被接收了,这个时候就相当于把事件强制接收了。注意在实际开发中一般不这样写,一般重写这个pointInside方法是为了避开子控件而让父控件去响应touch事件,这时返回NO,如果没有这样的需求就不必重写这个方法,如果真需要重写就返回父类的[super pointInside:point withEvent:event];