美文网首页牛叉的demoiOS技术点将来跳槽用
实现微信跳转方案猜想与解决方案

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

作者: 月球在此 | 来源:发表于2017-01-17 11:38 被阅读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

    相关文章

      网友评论

        本文标题:实现微信跳转方案猜想与解决方案

        本文链接:https://www.haomeiwen.com/subject/skykbttx.html