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;
}

更多优质文章,可以微信扫码关注:
JKRouter路由跳转 实现对工厂方法的支持