JLRoutes 地址:https://github.com/joeldev/JLRoutes

JLRoutes原理:

  • 它是通过url scheme来实现app内部,web到app,app与app之间跳转的第三方库
  • JLRoutes是个单例:有个字典routeControllersMap,然后字典是以scheme为key,routes(NSArray)为value,每次调用addRoute方法会将注册的url转换为JLRRouteDefinition类型,存在key为scheme的routes里。openurl时查找route,找到即回调block,具体的跳转我们可以在block里实现
  • JLRoutes 本质可以理解为:保存一个全局的字典,key 是 URL,value 是对应存放 block 的数组,URL 和 block 都会常驻在内存中,当打开一个 URL 时,JLRoutes 就可以遍历这个全局的字典,通过 URL 来执行对应的 block。

1.先 pod 'JLRoutes' 。或者直接拖入文件。

2.导入文件。#import "JLRoutes.h"

3.打开项目的info.plist文件,增加URL Types,在其中添加自定的URL Scheme, 且URL Scheme要具有唯一性。比如此处URL Scheme添加URLSchemeOne。

  • 从浏览器通过URL Scheme跳转应用

运行项目,当app安装到设备上时,URL Scheme将会自动注册 ,打开Safari在地址栏输入URLSchemeOne://(你刚刚在URL schemes中定义的Scheme),回车调整转,Safari会提示你『在URLSchemeDemo中打开连接吗?,点击确认,你会发现跳转到了你的应用中,并且后台也打印了相应的处理内容。

这个打印是在 AppDelegate.m 中要处理接收到的URL Scheme

- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation {

NSLog(@"从哪个app跳转而来 Bundle ID: %@", sourceApplication);

NSLog(@"URL scheme:%@", [url scheme]);returnYES;

}

  • 从另一个应用跳转到本应用

新建一个项目TestDemo,添加一个按钮,按钮添加一个点击事件,代码如下:

- (IBAction)buttonAction:(UIButton *)sender {

NSString *customURL = @"URLSchemeDemo://";

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];

}

运行项目,点击按钮,你会发现从TestDemo跳转到之前的应用了。

如果在跳转过去之后还要执行某些具体的操作,打开某些具体的页面,这时候我们要传递一些参数。比如我们现在就要解析URLSchemeDemo://UserViewController,希望使用这个URLScheme直接可以打开URLSchemeDemo应用中的UserViewController。

TestDemo里面代码:

- (void)buttonAction{

NSString *customURL = @"URLSchemeDemo://UserViewController";

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];

}

本应用代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[[JLRoutes globalRoutes] addRoute:@"/:controller" handler:^BOOL(NSDictionary *parameters) {

NSString  *controller = parameters[@"controller"];

[self.window.rootViewController presentViewController:[[NSClassFromString(controller) alloc] init] animated:YES completion:^{

}];

return YES;

}];

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{

return [JLRoutes routeURL:url];

}

如果要添加多个参数,则是:

addRoute:@"/:handle/:type/:matchId" 这样子添加的。此外,如果添加多个跳转,还可以给每个跳转设置优先级。如果不设置优先级,所有的注册优先级都为 0。

例如:

[[JLRoutes globalRoutes] addRoute:@"/:object/:action/:primaryKey" handler:^BOOL(NSDictionary *parameters) {

NSString *object = parameters[@"object"];

NSString *action = parameters[@"action"];

NSString *primaryKey = parameters[@"primaryKey"];

// stuff

return YES;

}];

  • app内部跳转

类似于从另一个应用跳转到本应用。

比如跳登录页面。

[Utils showMessage:@"token值已失效,请重新登录" sureTitle:@"确定" buttonClick:^{

NSString *customURL = @"URLSchemeDemo://LoginViewController";

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];

}];

[[JLRoutes globalRoutes] addRoute:@"/:controller" handler:^BOOL(NSDictionary *parameters) {

NSString  *controller = parameters[@"controller"];

UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:[[NSClassFromString(controller) alloc] init]];

[self.window.rootViewController presentViewController:nav animated:YES completion:^{

}];

return YES;

}];

JLRoutes使用的更多相关文章

  1. Scheme是什么、怎么自定义Scheme、JLRoutes的使用-备

    转到移动端开发后居然现在才用到Scheme真是惭愧惭愧. URL Scheme是什么 相信大家都知道URL. http://www.apple.com就是一个URL. 而://之前的部分就称为Sche ...

  2. 源码阅读-JLRoutes路由设置

    最后更新: 2018-1-20 JLRoutes 是在 github 上 Star 比较多的一个, 在各大平台也有介绍, 一些知识可以参考到下面的连接查看. 本文仅仅作为我的思考以及对应的心得; 一. ...

  3. JLRoutes笔记

    1.在info.plist中添加 <key>CFBundleURLTypes</key> <array> <dict> <key>CFBun ...

  4. 比JLRoutes更强大更好用的iOS开源路由框架—FFRouter

    目前iOS常用路由框架是JLRouter.HHRouter.MGJRouter. 但是这些路由库都各有不足,首先是JLRouter,用不到的功能繁多,而且基于遍历查找URL,效率低下.HHRouter ...

  5. 开源 iOS 项目分类索引大全 - 待整理

    开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...

  6. iOS - URL Scheme 操作

    推荐JLRoutes路由跳转 NSScanner 在寻找更加灵活的页面跳转和通知,我遇见了JLRoutes,从而学习使用URL Scheme来定义界面入口.以前从来没有使用过,不过很多大厂和流行的框架 ...

  7. iOS组件化思路 <转>

    随着应用需求逐步迭代,应用的代码体积将会越来越大,为了更好的管理应用工程,我们开始借助CocoaPods版本管理工具对原有应用工程进行拆分.但是仅仅完成代码拆分还不足以解决业务之间的代码耦合,为了更好 ...

  8. 【译】使用 CocoaPods 模块化iOS应用

    原文翻译自:Using CocoaPods to Modularize a Big iOS App 为你的移动应用选择正确的架构是一件相当大的事情,这会对你的工作流程造成影响,陷入面对的问题,可能是一 ...

  9. 转: GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean

    十年前,Martin Fowler撰写了 GUI Architectures 一文,至今被奉为经典.本文所谈的所谓架构二字,核心即是对于对于富客户端的 代码组织/职责划分 .纵览这十年内的架构模式变迁 ...

随机推荐

  1. Java知多少(57)主线程

    当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread),因为它是程序开始时就执行的.主线程的重要性体现在两方面: 它是产生其他子线程的线程: 通常它必须最后完成执 ...

  2. Secure backup

    Secure backup 安全备份软件 安全备份软件致力于提供一款开源免费的安全云备份软件,支持文件管理,文件自动同步到云盘,增量备份等功能. 目前正在开发过程中...

  3. [原]VS2012编译GLEW 1.11

    1.到http://glew.sourceforge.net/下载源代码 2.使用vs2012打开build下vc6的glew.dsw ,自动生成2012工程(一路点确定)特别注意:不要使用build ...

  4. [Android] 基于 Linux 命令行构建 Android 应用(六):Android 应用签名

    Android 要求所有应用在安装前必须使用证书进行数字签名.Android 使用该证书来确定一个应用以及其作者身份,该证书不要求由证书发行机构颁发,因此 Android 应用经常使用自我签名的证书, ...

  5. modbus调试工具

    1,简介 网站地址:http://www.modbustools.com/ 该网站提供了几个软件工具,可以运行于windows 2000/XP/Vista/7环境下,用来测试和仿真Modebus设备. ...

  6. 如何获取类或属性的自定义特性(Attribute)

    如何获取类或属性的自定义特性(Attribute) 问题说明: 在ActiveRecord或者其他的ORM等代码中, 我们经常可以看到自定义特性(Attribute)的存在(如下面的代码所示) [Pr ...

  7. jmeter之结果重定向

    在使用jmeter与jenkins对接时,发现默认打印出来的日志就是正常的summary统计,如果要查看日志,只能通过jmeter.log去查看. 来来来,我们一起温习下jmeter的命令行参数 -- ...

  8. Xshell设置网络设备自动登录

    使用Xshell登录网络设备时候需要手动输入用户名和密码 设置免输入用户名及密码 用户名 密码 再次登录就不需要手动输入用户名和密码了

  9. 洛谷P1605 迷宫【dfs】

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  10. stm32中断遵循原则

    故障案例: 定时器定时触发一个定时事件,在这个事件里面,会调用一个串口发送程序,发现串口发送数据不完整. 分析: 1.将发送函数剥离,放到独立的线程工作,运行稳定 2.使用单步调试,在定时中断事件中多 ...