牛叉的demoiOS技术点将来跳槽用

实现微信跳转方案猜想与解决方案

2017-01-17  本文已影响151人  月球在此
WechatIMG2.png

有人还记得,但是这段跳转的URL吗,一点直接从网页调到指定的界面了(不过现在已经被封了,不用再尝试了)

内部跳转其实很平常,只要给出指点的路径URL就能实现
但是我们分析下微信的URL:
第一部分是scheme:weixin
第二部分应该是一个判断是否进跳转方法的参数:dl
最后部分是要跳转的vc的名字
没有给一个完整的跳转路径是如何完成一步步的加载的,所以我有了一个实现的猜想虽然不一定和微信的完全一样

解决方案是在程序内部存放一张跳转的路由表

![Uploading Snip20170117_2_280003.png . . .]

通常一次一次查找,找到存放的路径


Snip20170117_2.png

存储的实体数据

Paste_Image.png

name:对外的查找名
class:controller的名字,之后可以通过NSClassFromString(name)方式创建实例
childs:这个类底下还能打开的子类

具体的实现

配合JLRoutes获取目标类名

    [[JLRoutes routesForScheme:@"weixin"] addRoute:@"/dl/:name" handler:^BOOL(NSDictionary<NSString *,id> * _Nonnull parameters) {
       //分析出目标类
        return NO;
    }];

打开H类

+ (NSString *)searchIndex:(NSString *)path withArr:(NSArray *)arr withTarget:(NSString *)name {
    for (int i = 0; i<arr.count; i++) {
        NSDictionary * data = arr[i];
        NSString * temp = [[path stringByAppendingString:@"/"] stringByAppendingString: [NSString stringWithFormat:@"%zd",i]];
        if ([[data objectForKey:@"name"] isEqualToString:name]) {
            return temp;
        }else if ([data objectForKey:@"childs"] && [[data objectForKey:@"childs"]count]>0) {
            NSString * path1 = [self searchIndex:temp withArr:[data objectForKey:@"childs"] withTarget:name];
            if (path1) {return path1;}
        }
    }
    return nil;
}

我们通过查找之后获得到的路径相当于/0/1/1数组第一个对象底下子类的第二个类底下的第二个类

根据表格创建
nav setViewControllers@[微信类,B类,H类]
之后修改TabBar selected
selectedViewController = 微信类

做了一个丑陋的Demo........不喜勿喷

Demo地址:https://github.com/CZXBigBrother/WeChatSchemeDemo

wechat.gif
上一篇下一篇

猜你喜欢

热点阅读