一翔怎、簡介
反應(yīng)鏈模式是通過在UIResponder上掛一個(gè)category缨伊,使得事件和參數(shù)可以沿著responder chain逐步傳遞。這相當(dāng)于借用responder chain實(shí)現(xiàn)了一個(gè)自己的事件傳遞鏈。
二校翔、使用場(chǎng)景
這在事件需要層層傳遞的時(shí)候特別好用。比如復(fù)雜的Cell界面上的按鈕事件要傳遞到VC曲饱,如果用以前delegate方式悠抹,就需要多個(gè)delegate進(jìn)行層層傳遞,現(xiàn)在是要包含下UIResponder+Router.h即可做到事件層層傳遞
詳細(xì)說明請(qǐng)移步到Casa大神關(guān)于ResponderChain的對(duì)象交互方式
三扩淀、使用 cell->VC傳遞
1楔敌、Cell里面代碼如下
#import "UIResponder+ChainResponder.h"
...
-(void)tap
{
[self handAction:@"某個(gè)Cell" withObject:@"heihei"];
}
-(BOOL)chainRouter:(NSString *)identifier withObject:(id)object
{
//這里也可以處理下 不如按鈕點(diǎn)擊的ui處理 不處理就直接傳遞給nextresponder;
return YES;
}
...
2、VC里面代碼如下
#import "UIResponder+ChainResponder.h"
...
-(BOOL)chainRouter:(NSString *)identifier withObject:(id)object
{
NSLog(@"vc頁面收到%@的數(shù)據(jù)做處理 object 為數(shù)據(jù) 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 就在當(dāng)前頁面處理就結(jié)束了 是實(shí)現(xiàn)消息鏈傳遞的最好方法
return YES;
}
@end
四、代碼用例(取自別人滴)
https://github.com/bajiejiedian/ResponderChain
https://github.com/hunterxie/ResponderChain