整体思路就是写一个 “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<UITouch *> *)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
目前应该有很多团队在用这种方式开发了,如果其中有什么坑点,或者相较于常规传值方式的优缺点的想法,希望多多评论提出来,感激不尽。
网友评论