美文网首页
iOS响应链

iOS响应链

作者: ziyouzhe4 | 来源:发表于2017-04-06 12:21 被阅读29次

当用户的手指点击屏幕的时候,iOS操作系统通过触摸屏获取用户的点击行为,然后把这个点击信息包装成UITouch和UIEvent形式的实例,然后找到当前运行的程序,在这个程序中逐级寻找能够响应这个事件的所有对象,然后把这些对象放入一个链表,这个链表就是iOS的响应链。

有如下界面:

Paste_Image.png

Controller中的view 上面添加了绿色的view 绿色的view上面添加一个button

1.触摸的这个点坐标在view上吗?true,然后view加入响应链,继续遍历view的子页面greenView。
2.在greenView上吗?true,greenView加入响应链,继续遍历greenView的子视图button。
3.在button上吗?在,button加入响应链,button没有子页面,这个检测结束。
经过以上检测就形成了这样一个链:view -->greenView -->button。

添加button的点击事件,在button中重写

  • (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event; 方法
  
  - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
    UIResponder * next = [self nextResponder];
    NSMutableString * prefix = @"*****".mutableCopy;
    NSLog(@"%@", [self class]);
    
    while (next != nil) {
        NSLog(@"%@%@", prefix, [next class]);
        [prefix appendString: @"*****"];
        next = [next nextResponder];
    }   
}

打印如下:    
Paste_Image.png

事件的传递是从上到下的,事件的响应是从下到上的。
响应链已经建立起来,那么下面就该响应用户刚才的那次点击了,首先找到第一响应者button,看他有没有处理这次点击事件,如果button不处理就通过响应链找到它的nextResponder-greenView,greenView如果也不处理就会一直向上寻找,如果最终找到响应链的最后一个响应者AppDelegate也不处理,就会丢弃这次点击事件

相关文章

  • iOS 响应链

    iOS开发 - 事件传递响应链iOS 响应者链,事件的传递事件传递之响应链Cocoa Touch事件处理流程--响...

  • iOS响应者链

    iOS响应者链

  • 二、事件传递链和响应者链

    iOS触摸事件详解iOS开发-事件传递响应链 响应者链 UIResponser包括了各种Touch message...

  • 响应链

    iOS事件响应链中Hit-Test View的应用从iOS的事件响应链看TableView为什么不响应touche...

  • tableView 与collectionView嵌套 coll

    这里就要说到 iOS 的响应链iOS 的所有点击方法 都是用响应链 传递到最底层的 所以可以截取响应链 让coll...

  • iOS中对于响应链的理解

    对于响应链的理解: 在IOS中,有响应者链对事件进行响应,所有的响应类都是UIResponder的子类,响应者链是...

  • 深入浅出iOS事件机制

    深入浅出iOS事件机制事件传递:响应链事件传递响应链

  • iOS响应者链

    参考好文 iOS开发-事件传递响应链,用运行时分析 iOS事件传递:响应者链[译] http://www.jian...

  • UIView 和 CALayer

    从iOS的响应链开始说起 最近在看iOS 的响应链 看到了这样的关系 因为UIView 继承自 UIRespond...

  • ios响应者链

    iOS 响应者链 字数418 阅读41 评论0 喜欢3 响应者链 响应者链是一个响应者的连接序列,事件或者动作消息...

网友评论

      本文标题:iOS响应链

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