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];


posted @ 2015-08-02 12:40  击水湘江  阅读(227)  评论(1编辑  收藏  举报