美文网首页iOS开发
iOS-事件传递、响应者链条、事件响应

iOS-事件传递、响应者链条、事件响应

作者: inyourface | 来源:发表于2019-10-12 11:34 被阅读0次

    1.响应者链条

    只有继承UIResponder的对象才能够接收并处理事件,UIResponder 是所有响应对象的基类。UIApplication、 UIViewController、 UIWindow 和继承自UIView的UIKit类都直接或间接的继承自UIResponder,所以它们的实例都是可以构成响应者对象。响应者链就是由一系列的响应者对象构成的一个层次结构

    2.事件的传递

    UIApplication->UIViewController->UIView->UIButton

    如果父视图不能接收事件,那么就不会向下传递,子视图也不可能接收处理事件

    3.事件的响应

    事件传递找到视图UIview的时候首先看view能否处理这个事件,如果能处理则交由其处理并停止该事件的向上响应,如果不能则会将事件传递给其上级视图;如果上级视图无法处理则会继续往上传递;一直到 UIwindow,如果UIwindow不能处理此事件则继续交给UIApplication处理,如果最后UIApplication还是不能处理此事件则将其丢弃。

    总结:事件的传递:自上向下

                事件的响应:自下向上

    4.UIResponder提供了几个处理事件的方法:

    //触摸事件

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

    - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

    //加速计事件

    - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event;

    - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event;

    - (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event;

    //远程控制事件

    - (void)remoteControlReceivedWithEvent:(UIEvent *)event;


    相关文章

      网友评论

        本文标题:iOS-事件传递、响应者链条、事件响应

        本文链接:https://www.haomeiwen.com/subject/ljqqmctx.html