ios router原创小记

整体思路就是写一个 “UIResponder”的分类(category)不基于delegate,block,kvc,kvo

代码背景:controller中 addSubview 一个view 点击view时,将事件及参数专递给controller中(不同的事件要加以区分)

直接上代码

//category.m中
- (void)routerEventWithName:(NSString *)eventName userInfo:(NSDictionary *)userInfo{
    NSLog(@"我走了分类方法");
    [[self nextResponder] routerEventWithName:eventName userInfo:userInfo];
}
//并在.h中声明
//view.m中
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"我点击了方法");
    [[self nextResponder] routerEventWithName:@"push" userInfo:nil];
}
//controller.m中
- (void)viewDidLoad {
    [super viewDidLoad];

    [self.view addSubview:({
        self.routerView = [TestView new];
        self.routerView.frame = CGRectMake(100, 100, 100, 100);
        self.routerView;
    })];
    
    
}

- (void)routerEventWithName:(NSString *)eventName userInfo:(NSDictionary *)userInfo{
    NSLog(@"控制器响应了");
    if([eventName isEqualToString:@"push"])
    {
        NSLog(@"do what you want!");
    }
}

最后控制台可以看到效果


屏幕快照 2019-08-23 上午11.20.42.png

目前应该有很多团队在用这种方式开发了,如果其中有什么坑点,或者相较于常规传值方式的优缺点的想法,希望多多评论提出来,感激不尽。

你可能感兴趣的:(ios router原创小记)