JKRouter路由跳转 实现对工厂方法的支持
在使用JKRouter进行路由开发的过程中,有的时候我们会根据不同的参数来跳转不同的页面。比如根据频道的type跳转到不同的页面,这些页面的布局不同,ViewController也不同, 这个时候我们常常会用到工厂方法,而对于这些工厂方法,之前JKRouter是无能为力的。
JKRouter如何配置才可以兼容工厂方法
现在大家可以通过升级JKRouter进行操作了。主要操作步骤如下:
1,比如在工厂类JKFactory.h
文件中遵守协议具体代码:
@interface JKFactory : NSObject<JKRouterDelegate>
@end
2,在JKFactory.m
文件中实现如下方法
@implementation JKFactory
//实现的协议方法
+ (UIViewController *)jkRouterFactoryViewControllerWithJSON:(NSDictionary *)dic{
NSInteger cid = [dic jk_integerForKey:@"cid"];
return [self factoryControllerWithCid:cid];
}
//示例工厂方法
+ (UIViewController *)factoryControllerWithCid:(NSInteger)cid{
if (cid ==0) {
return [FactoryAViewController new];
}else if (cid ==1){
return [FactoryBViewController new];
}else if (cid ==2){
return [FactoryCViewController new];
}
return nil;
}
@end
JKRouter升级后的影响有那些
1 module.json配置文件需要做一下调整。
具体是如下:
{
"moduleID":"factory",
"type":"Factory",
"target":"JKFactory", //之前此处的key是targetVC,现在是target意味着只要是遵守JKRouterDelegate的NSObject类都可以
"desc":"钱包流水 无参数"
}
小伙伴可以检查一下,顺便修改下。
2 解析json路由文件表的地方需要修改下:
+ (NSString *)getHomePathWithModuleID:(NSString *)moduleID{
NSString *vcClassName = nil;
for (NSDictionary *module in [JKRouter router].modules) {
NSString *tempModuleID =[NSString stringWithFormat:@"%@",module[@"moduleID"]];
if ([tempModuleID isEqualToString:moduleID]) {
vcClassName = module[@"target"];//这个地方之前是targetVC现在是target了,小伙伴们需要修改下
break;
}
}
return vcClassName;
}
更多优质文章,可以微信扫码关注: