JLRoutes使用
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使用的更多相关文章
- Scheme是什么、怎么自定义Scheme、JLRoutes的使用-备
转到移动端开发后居然现在才用到Scheme真是惭愧惭愧. URL Scheme是什么 相信大家都知道URL. http://www.apple.com就是一个URL. 而://之前的部分就称为Sche ...
- 源码阅读-JLRoutes路由设置
最后更新: 2018-1-20 JLRoutes 是在 github 上 Star 比较多的一个, 在各大平台也有介绍, 一些知识可以参考到下面的连接查看. 本文仅仅作为我的思考以及对应的心得; 一. ...
- JLRoutes笔记
1.在info.plist中添加 <key>CFBundleURLTypes</key> <array> <dict> <key>CFBun ...
- 比JLRoutes更强大更好用的iOS开源路由框架—FFRouter
目前iOS常用路由框架是JLRouter.HHRouter.MGJRouter. 但是这些路由库都各有不足,首先是JLRouter,用不到的功能繁多,而且基于遍历查找URL,效率低下.HHRouter ...
- 开源 iOS 项目分类索引大全 - 待整理
开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...
- iOS - URL Scheme 操作
推荐JLRoutes路由跳转 NSScanner 在寻找更加灵活的页面跳转和通知,我遇见了JLRoutes,从而学习使用URL Scheme来定义界面入口.以前从来没有使用过,不过很多大厂和流行的框架 ...
- iOS组件化思路 <转>
随着应用需求逐步迭代,应用的代码体积将会越来越大,为了更好的管理应用工程,我们开始借助CocoaPods版本管理工具对原有应用工程进行拆分.但是仅仅完成代码拆分还不足以解决业务之间的代码耦合,为了更好 ...
- 【译】使用 CocoaPods 模块化iOS应用
原文翻译自:Using CocoaPods to Modularize a Big iOS App 为你的移动应用选择正确的架构是一件相当大的事情,这会对你的工作流程造成影响,陷入面对的问题,可能是一 ...
- 转: GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean
十年前,Martin Fowler撰写了 GUI Architectures 一文,至今被奉为经典.本文所谈的所谓架构二字,核心即是对于对于富客户端的 代码组织/职责划分 .纵览这十年内的架构模式变迁 ...
随机推荐
- Opencv Mat运算(转)
一.矩阵Mat I,img,I1,I2,dst,A,B; double k,alpha; Scalar s; //注意Mat的行列号是从0开始的 //定义矩阵a,b,c Mat a,b,c; //生成 ...
- 如何在wiced平台上编译,运行智能彩灯 实时控制彩灯的色调和开关
https://github.com/WildDogTeam/demo-c-rgblight/tree/master/src/device 恢复出厂的GPIO口在demo_platform.h声明为W ...
- Nginx 实现负载均衡
.安装nginx和tomcat 我这里是使用docker安装的.安装流程可参照 dockerfile 这里安装了两个tomcat,端口分别是42000和42001.第二个tomcat的首页随便加了些代 ...
- [Model] ResNet
ResNet引入了残差网络结构(residual network),通过残差网络,可以把网络层弄的很深,据说现在达到了1000多层,最终的网络分类的效果也是非常好 Ref: http://blog.c ...
- PHP实现删除非站内外部链接实例代码
/** * 删除非站内链接 * * @access public * @param string $body 内容 * @param array $allow_urls ...
- git 误删分支恢复方法
在使用Git的过程中,因为人为因素造成分支(commit)被删除,可以使用以下步骤进行恢复. 首先用以下步骤创建一个新分支,修改一些文件后删除,以便进行恢复. 1.创建分支 abc git branc ...
- Doker学习笔记之一:安装
基于Ubuntu16.04LTS 第一步:通过脚本进行安装 $ curl -sSL https://get.docker.com/ | sh 或者选择国内的DaoCloud安装脚本 $ curl -s ...
- 多线程局部变量之threading.local()用法
假如,开了十个线程并且做同样的一件事,他们需要带着自己的数据进来,完成事情后带着自己的数据出去.如果是并发,同时进来,他们的数据就会混乱. 一般情况,我们加锁就可以了,一个人先进来,先加锁,另一个人过 ...
- Kernel parameters for Db2 database server installation (Linux and UNIX)
Db2 11.1 For root installations, the database manager uses a formula to automatically adjust kernel ...
- 20165311 实验一 Java开发环境的熟悉
一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:李嘉昕 学号:20165311 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验时间:13:45 - 15:25 实验序号:3 实 ...