美文网首页
ResponderChain 界面间事件传递

ResponderChain 界面间事件传递

作者: RichieQ | 来源:发表于2018-03-30 16:59 被阅读0次

    一、简介

    反应链模式是通过在UIResponder上挂一个category,使得事件和参数可以沿着responder chain逐步传递。这相当于借用responder chain实现了一个自己的事件传递链。

    二、使用场景

    这在事件需要层层传递的时候特别好用。比如复杂的Cell界面上的按钮事件要传递到VC,如果用以前delegate方式,就需要多个delegate进行层层传递,现在是要包含下UIResponder+Router.h即可做到事件层层传递
    详细说明请移步到Casa大神关于ResponderChain的对象交互方式

    三、使用 cell->VC传递

    1、Cell里面代码如下

    #import "UIResponder+ChainResponder.h"
    ...
    -(void)tap
    {
        [self handAction:@"某个Cell" withObject:@"heihei"];
    }
    -(BOOL)chainRouter:(NSString *)identifier withObject:(id)object
    {
       //这里也可以处理下 不如按钮点击的ui处理  不处理就直接传递给nextresponder;
        return YES;
    }
    ...
    

    2、VC里面代码如下

    #import "UIResponder+ChainResponder.h"
    ...
    -(BOOL)chainRouter:(NSString *)identifier withObject:(id)object
    {
        NSLog(@"vc页面收到%@的数据做处理  object 为数据  return NO  不在往下传递",identifier);
        
        return NO;
    }
    ...
    

    3、UIResponder+ChainResponder.h

    #import <UIKit/UIKit.h>
    
    @interface UIResponder (ChainResponder)
    
    -(void)handAction:(NSString *)identifier withObject:(id)object;
    
    -(BOOL)chainRouter:(NSString *)identifier withObject:(id)object;
    
    @end
    

    4 、UIResponder+ChainResponder.m

    #import "UIResponder+ChainResponder.h"
    
    @implementation UIResponder (ChainResponder)
    
    -(void)handAction:(NSString *)identifier withObject:(id)object
    {
        if ([self chainRouter:identifier withObject:object] && self.nextResponder) {
            [self.nextResponder handAction:identifier withObject:object];
        }
    }
    
    -(BOOL)chainRouter:(NSString *)identifier withObject:(id)object
    {
        //如果是yes  就往下传递 如果NO  就在当前页面处理就结束了 是实现消息链传递的最好方法
        return YES;
    }
    @end
    

    四、代码用例(取自别人滴)

    https://github.com/bajiejiedian/ResponderChain
    https://github.com/hunterxie/ResponderChain

    相关文章

      网友评论

          本文标题:ResponderChain 界面间事件传递

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