资料介绍
软件简介
FFRouter 是 iOS 中一个强大且易用的 URL 路由库,支持 URL Rewrite,使 APP 在发布之后也可以动态修改相关路由逻辑。基于匹配查找 URL,效率高。集成和使用都非常简单!
功能
-
具备基本的 URL 注册、Route、取消注册、打印 Log 等
-
支持使用通配符(*)注册 URL
-
支持 URL Rewrite
-
支持 Rewrite 时获取原 URL 参数或 URLComponents,并可对其进行URL Encode或 Decode
-
支持通过 URL 获取 Object
-
支持 Route URL 时传递非常规对象
-
支持 Route 一个未注册的 URL 时统一回调
安装
CocoaPods
target 'MyApp' do pod 'FFRouter' end
运行 pod install
手动安装
添加其中的 FFRouter
文件夹到自己项目
使用方法
首先
#import "FFRouter.h"
1、基本使用
/** 注册 url @param routeURL 要注册的 URL @param handlerBlock URL 被 Route 后的回调 */ + (void)registerRouteURL:(NSString *)routeURL handler:(FFRouterHandler)handlerBlock; /** 注册 URL,通过该方式注册的 URL 被 Route 后可返回一个 Object @param routeURL 要注册的 URL @param handlerBlock URL 被 Route 后的回调,可在回调中返回一个 Object */ + (void)registerObjectRouteURL:(NSString *)routeURL handler:(FFObjectRouterHandler)handlerBlock; /** 判断 URL 是否可被 Route(是否已经注册) @param URL 要判断的 URL @return 是否可被 Route */ + (BOOL)canRouteURL:(NSString *)URL; /** Route 一个 URL @param URL 要 Router 的 URL */ + (void)routeURL:(NSString *)URL; /** Route 一个 URL,并带上额外参数 @param URL 要 Router 的 URL @param parameters 额外参数 */ + (void)routeURL:(NSString *)URL withParameters:(NSDictionary*)parameters; /** Route 一个 URL,可获得返回的 Object @param URL 要 Router 的 URL @return 返回的 Object */ + (id)routeObjectURL:(NSString *)URL; /** Route 一个 URL,并带上额外参数,可获得返回的 Object @param URL 要 Router 的 URL @param parameters 额外参数 @return 返回的 Object */ + (id)routeObjectURL:(NSString *)URL withParameters:(NSDictionary *)parameters; /** Route 一个未注册 URL 时回调 @param handler 回调 */ + (void)routeUnregisterURLHandler:(FFRouterUnregisterURLHandler)handler; /** 取消注册某个 URL @param URL 要被取消注册的 URL */ + (void)unregisterRouteURL:(NSString *)URL; /** 取消注册所有 URL */ + (void)unregisterAllRoutes; /** 是否显示 Log,用于调试 @param enable YES or NO,默认为 NO */ + (void)setLogEnabled:(BOOL)enable;
【备注】
(1)注册 URL:
[FFRouter registerRouteURL:@"protocol://page/routerDetails/:id" handler:^(NSDictionary *routerParameters) { //Route的URL与本次注册URL匹配时的回调 }]; [FFRouter registerRouteURL:@"wildcard://*" handler:^(NSDictionary *routerParameters) { //Route的URL与本次注册URL匹配时的回调 }]; [FFRouter registerRouteURL:@"protocol://page/routerObjectDetails" handler:^(NSDictionary *routerParameters) { //Route的URL与本次注册URL匹配时的回调 }];
可通过routerParameters
获取 URL 中的参数,routerParameters[FFRouterParameterURLKey]
为完整的URL. (2)当需要通过以下方法:
+ (id)routeObjectURL:(NSString *)URL;
Route 一个 URL 并获取返回值时,需要使用如下方法注册 URL:
+ (void)registerObjectRouteURL:(NSString *)routeURL handler:(FFObjectRouterHandler)handlerBlock;
并在 handlerBlock 中返回需要返回的 Object,例如:
//注册并返回必要的值 [FFRouter registerObjectRouteURL:@"protocol://page/routerObjectDetails" handler:^id(NSDictionary *routerParameters) { NSString *str = @“根据需要返回必要的Object”; return str; }]; //获取返回的值 NSString *ret = [FFRouter routeObjectURL:@"protocol://page/routerObjectDetails"];
(3)如果需要传递非常规对象作为参数,如UIImage
等,可使用如下方式:
[FFRouter routeURL:@"protocol://page/routerDetails?nickname=imlifengfeng" withParameters:@{@"img":[UIImage imageNamed:@"router_test_img"]}];
2、URL Rewrite
/** 根据设置的 Rules 去 rewrite 一个 URL @param url 将被 rewrite 的 URL @return rewrite 后的 URL */ + (NSString *)rewriteURL:(NSString *)url; /** 添加一个 RewriteRule @param matchRule 正则匹配规则 @param targetRule 转换规则 */ + (void)addRewriteMatchRule:(NSString *)matchRule targetRule:(NSString *)targetRule; /** 同时添加多个 RewriteRule,格式必须为:@[@{@"matchRule":@"YourMatchRule",@"targetRule":@"YourTargetRule"},...] @param rules RewriteRules */ + (void)addRewriteRules:(NSArray*)rules; /** 移除一个 RewriteRule @param matchRule 将被移除的 matchRule */ + (void)removeRewriteMatchRule:(NSString *)matchRule; /** 移除所有 RewriteRule */ + (void)removeAllRewriteRules;
【备注】
(1)可以使用正则
添加一条 Rewrite 规则,例如: 要实现打开 URL:https://www.taobao.com/search/原子弹
时,将其拦截,改用本地已注册的 URL:protocol://page/routerDetails?product=原子弹
打开。 首先添加一条 Rewrite 规则:
[FFRouterRewrite addRewriteMatchRule:@"(?:https://)?www.taobao.com/search/(.*)" targetRule:@"protocol://page/routerDetails?product=$1"];
之后在打开URL:https://www.taobao.com/search/原子弹
时,将会 Rewrite 到URL:protocol://page/routerDetails?product=原子弹
。
[FFRouter routeURL:@"https://www.taobao.com/search/原子弹"];
(2)可以通过以下方法同时增加多个规则:
+ (void)addRewriteRules:(NSArray*)rules;
其中 rules 格式必须为以下格式:
@[@{@"matchRule":@"YourMatchRule1",@"targetRule":@"YourTargetRule1"}, @{@"matchRule":@"YourMatchRule2",@"targetRule":@"YourTargetRule2"}, @{@"matchRule":@"YourMatchRule3",@"targetRule":@"YourTargetRule3"},]
(3)Rewrite 规则中的保留字:
-
通过
$scheme
、$host
、$port
、$path
、$query
、$fragment
获取标准 URL 中的相应部分。通过$url
获取完整 URL -
通过
$1
、$2
、$3
...获取matchRule
的正则中使用圆括号取出的参数 -
$
:原变量的值、$$
:原变量URL Encode后的值、$#
:原变量URL Decode后的值
例如: https://www.taobao.com/search/原子弹
对于Rewrite 规则(?:https://)?www.taobao.com/search/(.*)
$1=原子弹 $$1=%e5%8e%9f%e5%ad%90%e5%bc%b9
同样,https://www.taobao.com/search/%e5%8e%9f%e5%ad%90%e5%bc%b9
对于Rewrite 规则(?:https://)?www.taobao.com/search/(.*)
$1=%e5%8e%9f%e5%ad%90%e5%bc%b9 $#1=原子弹
2、FFRouterNavigation
考虑到经常用路由配置UIViewController
之间的跳转,所以增加了额外的工具FFRouterNavigation
来更方便地控制UIViewController
之间的跳转。具体使用方法如下:
/** push 时是否自动隐藏底部TabBar @param hide 是否自动隐藏,默认为 NO */ + (void)autoHidesBottomBarWhenPushed:(BOOL)hide; /** 获取当前 ViewController @return 当前 ViewController */ + (UIViewController *)currentViewController; /** 获取当前 NavigationViewController @return return 当前 NavigationViewController */ + (nullable UINavigationController *)currentNavigationViewController; /** Push ViewController @param viewController 被 Push 的 ViewController @param animated 是否使用动画 */ + (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; /** Push ViewController,可设置当前 ViewController 是否还保留 @param viewController 被 Push 的 ViewController @param replace 当前 ViewController 是否还保留 @param animated 是否使用动画 */ + (void)pushViewController:(UIViewController *)viewController replace:(BOOL)replace animated:(BOOL)animated; /** Push 多个 ViewController @param viewControllers ViewController Array @param animated 是否使用动画 */ + (void)pushViewControllerArray:(NSArray *)viewControllers animated:(BOOL)animated; /** present ViewController @param viewController 被 present 的 ViewController @param animated 是否使用动画 @param completion 回调 */ + (void)presentViewController:(UIViewController *)viewController animated:(BOOL)animated completion:(void (^ __nullable)(void))completion; /** 关闭当前 ViewController,push、present 方式通用 @param animated 是否使用动画 */ + (void)closeViewControllerAnimated:(BOOL)animated;
感谢
FFRouter
实现方案参考了以下文章,在此表示感谢!
- LABVIEW NPOI库文件下载 192次下载
- altium designer元件库下载 703次下载
- STM32f10x官方固件库资料 65次下载
- AD常用3D封装库(STEP)下载 370次下载
- AD 2D标准封装库下载 22次下载
- 苹果ios蓝牙调试助手工具源代码下载 7次下载
- IRMCK/F171灵活易用的电机控制芯片 5次下载
- 选择最简单易用的HyperLynx进行串扰仿真资料下载
- 如何使用OpenWRT路由器实现网络存储系统的设计 28次下载
- 兼容iOS 10的一些问题和使用资料整理合集
- AN1246中文手册之如何在Microchip图形库中创建控件
- 通用封装库(protel/AD版本通用)资料下载 0次下载
- 在路由器上安装IOS映像 0次下载
- 基于BGP协议属性的路由策略 11次下载
- 路由控制和路由选择
- 千兆路由器和百兆路由器的区别 万兆路由器有什么好处? 1717次阅读
- 路由重发布和路由汇总的概念 1220次阅读
- 无模式数据库的利与弊 366次阅读
- 什么是路由表?IP路由表包含了哪些要素? 1w次阅读
- 1000+常用Python库一览 983次阅读
- work库在VHDL中的特殊用法 824次阅读
- Cargo如何访问世界上最强大的3D库 633次阅读
- 关于路由策略数据库(RPDB) 1798次阅读
- 一款适合初学者超轻量级C语言网络库—Dyad 1594次阅读
- 一文读懂boost库的概念和安装方式 7333次阅读
- 内存数据库系统全面解析 4140次阅读
- 思科路由器多少钱_思科路由器优势有哪些_如何选择选择思科路由器 3069次阅读
- 极路由和普通路由有什么区别 3006次阅读
- 极路由怎么设置_极路由详细设置图文教程 12.5w次阅读
- 动态路由特点及构成 3200次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多