資料介紹
軟件簡介
FFRouter 是 iOS 中一個(gè)強(qiáng)大且易用的 URL 路由庫,支持 URL Rewrite,使 APP 在發(fā)布之后也可以動態(tài)修改相關(guān)路由邏輯。基于匹配查找 URL,效率高。集成和使用都非常簡單!
功能
-
具備基本的 URL 注冊、Route、取消注冊、打印 Log 等
-
支持使用通配符(*)注冊 URL
-
支持 URL Rewrite
-
支持 Rewrite 時(shí)獲取原 URL 參數(shù)或 URLComponents,并可對其進(jìn)行URL Encode或 Decode
-
支持通過 URL 獲取 Object
-
支持 Route URL 時(shí)傳遞非常規(guī)對象
-
支持 Route 一個(gè)未注冊的 URL 時(shí)統(tǒng)一回調(diào)
安裝
CocoaPods
target?'MyApp'?do ??pod?'FFRouter' end
運(yùn)行?pod install
手動安裝
添加其中的?FFRouter
?文件夾到自己項(xiàng)目
使用方法
首先
#import?"FFRouter.h"
1、基本使用
/** ?注冊?url ?@param?routeURL?要注冊的?URL ?@param?handlerBlock?URL?被?Route?后的回調(diào) ?*/ +?(void)registerRouteURL:(NSString?*)routeURL?handler:(FFRouterHandler)handlerBlock; /** ?注冊?URL,通過該方式注冊的?URL?被?Route?后可返回一個(gè)?Object ?@param?routeURL?要注冊的?URL ?@param?handlerBlock?URL?被?Route?后的回調(diào),可在回調(diào)中返回一個(gè)?Object ?*/ +?(void)registerObjectRouteURL:(NSString?*)routeURL?handler:(FFObjectRouterHandler)handlerBlock; /** ?判斷?URL?是否可被?Route(是否已經(jīng)注冊) ?@param?URL?要判斷的?URL ?@return?是否可被?Route ?*/ +?(BOOL)canRouteURL:(NSString?*)URL; /** ?Route?一個(gè)?URL ?@param?URL?要?Router?的?URL ?*/ +?(void)routeURL:(NSString?*)URL; /** ?Route?一個(gè)?URL,并帶上額外參數(shù) ?@param?URL?要?Router?的?URL ?@param?parameters?額外參數(shù) ?*/ +?(void)routeURL:(NSString?*)URL?withParameters:(NSDictionary?*)parameters; /** ?Route?一個(gè)?URL,可獲得返回的?Object ?@param?URL?要?Router?的?URL ?@return?返回的?Object ?*/ +?(id)routeObjectURL:(NSString?*)URL; /** ?Route?一個(gè)?URL,并帶上額外參數(shù),可獲得返回的?Object ?@param?URL?要?Router?的?URL ?@param?parameters?額外參數(shù) ?@return?返回的?Object ?*/ +?(id)routeObjectURL:(NSString?*)URL?withParameters:(NSDictionary ?*)parameters; /** ?Route?一個(gè)未注冊?URL?時(shí)回調(diào) ?@param?handler?回調(diào) ?*/ +?(void)routeUnregisterURLHandler:(FFRouterUnregisterURLHandler)handler; /** ?取消注冊某個(gè)?URL ?@param?URL?要被取消注冊的?URL ?*/ +?(void)unregisterRouteURL:(NSString?*)URL; /** ?取消注冊所有?URL ?*/ +?(void)unregisterAllRoutes; /** ?是否顯示?Log,用于調(diào)試 ?@param?enable?YES?or?NO,默認(rèn)為?NO ?*/ +?(void)setLogEnabled:(BOOL)enable;
【備注】
(1)注冊 URL:
[FFRouter?registerRouteURL:@"protocol://page/routerDetails/:id"?handler:^(NSDictionary?*routerParameters)?{ ???//Route的URL與本次注冊URL匹配時(shí)的回調(diào)?? }]; [FFRouter?registerRouteURL:@"wildcard://*"?handler:^(NSDictionary?*routerParameters)?{ ???//Route的URL與本次注冊URL匹配時(shí)的回調(diào)?? }]; [FFRouter?registerRouteURL:@"protocol://page/routerObjectDetails"?handler:^(NSDictionary?*routerParameters)?{ ???//Route的URL與本次注冊URL匹配時(shí)的回調(diào)?? }];
可通過routerParameters
獲取 URL 中的參數(shù),routerParameters[FFRouterParameterURLKey]
為完整的URL. (2)當(dāng)需要通過以下方法:
+?(id)routeObjectURL:(NSString?*)URL;
Route 一個(gè) URL 并獲取返回值時(shí),需要使用如下方法注冊 URL:
+?(void)registerObjectRouteURL:(NSString?*)routeURL?handler:(FFObjectRouterHandler)handlerBlock;
并在 handlerBlock 中返回需要返回的 Object,例如:
//注冊并返回必要的值 [FFRouter?registerObjectRouteURL:@"protocol://page/routerObjectDetails"?handler:^id(NSDictionary?*routerParameters)?{ ????????NSString?*str?=?@“根據(jù)需要返回必要的Object”; ????????return?str; ????}]; ???? //獲取返回的值 NSString?*ret?=?[FFRouter?routeObjectURL:@"protocol://page/routerObjectDetails"];
(3)如果需要傳遞非常規(guī)對象作為參數(shù),如UIImage
等,可使用如下方式:
[FFRouter?routeURL:@"protocol://page/routerDetails?nickname=imlifengfeng"?withParameters:@{@"img":[UIImage?imageNamed:@"router_test_img"]}];
2、URL Rewrite
/** ?根據(jù)設(shè)置的?Rules?去?rewrite?一個(gè)?URL ?@param?url?將被?rewrite?的?URL ?@return?rewrite?后的?URL ?*/ +?(NSString?*)rewriteURL:(NSString?*)url; /** ?添加一個(gè)?RewriteRule ?@param?matchRule?正則匹配規(guī)則 ?@param?targetRule?轉(zhuǎn)換規(guī)則 ?*/ +?(void)addRewriteMatchRule:(NSString?*)matchRule?targetRule:(NSString?*)targetRule; /** ?同時(shí)添加多個(gè)?RewriteRule,格式必須為:@[@{@"matchRule":@"YourMatchRule",@"targetRule":@"YourTargetRule"},...] ?@param?rules?RewriteRules ?*/ +?(void)addRewriteRules:(NSArray?*)rules; /** ?移除一個(gè)?RewriteRule ?@param?matchRule?將被移除的?matchRule ?*/ +?(void)removeRewriteMatchRule:(NSString?*)matchRule; /** ?移除所有?RewriteRule ?*/ +?(void)removeAllRewriteRules;
【備注】
(1)可以使用正則
添加一條 Rewrite 規(guī)則,例如: 要實(shí)現(xiàn)打開 URL:https://www.taobao.com/search/原子彈
時(shí),將其攔截,改用本地已注冊的 URL:protocol://page/routerDetails?product=原子彈
打開。 首先添加一條 Rewrite 規(guī)則:
[FFRouterRewrite?addRewriteMatchRule:@"(?:https://)?www.taobao.com/search/(.*)"?targetRule:@"protocol://page/routerDetails?product=$1"];
之后在打開URL:https://www.taobao.com/search/原子彈
時(shí),將會 Rewrite 到URL:protocol://page/routerDetails?product=原子彈
。
[FFRouter?routeURL:@"https://www.taobao.com/search/原子彈"];
(2)可以通過以下方法同時(shí)增加多個(gè)規(guī)則:
+?(void)addRewriteRules:(NSArray?*)rules;
其中 rules 格式必須為以下格式:
@[@{@"matchRule":@"YourMatchRule1",@"targetRule":@"YourTargetRule1"}, ??@{@"matchRule":@"YourMatchRule2",@"targetRule":@"YourTargetRule2"}, ??@{@"matchRule":@"YourMatchRule3",@"targetRule":@"YourTargetRule3"},]
(3)Rewrite 規(guī)則中的保留字:
-
通過?
$scheme
、$host
、$port
、$path
、$query
、$fragment
?獲取標(biāo)準(zhǔn) URL 中的相應(yīng)部分。通過$url
獲取完整 URL -
通過?
$1
、$2
、$3
...獲取matchRule
的正則中使用圓括號取出的參數(shù) -
$
:原變量的值、$$
:原變量URL Encode后的值、$#
:原變量URL Decode后的值
例如:?https://www.taobao.com/search/原子彈
對于Rewrite 規(guī)則(?: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 規(guī)則(?:https://)?www.taobao.com/search/(.*)
$1=%e5%8e%9f%e5%ad%90%e5%bc%b9 $#1=原子彈
2、FFRouterNavigation
考慮到經(jīng)常用路由配置UIViewController
之間的跳轉(zhuǎn),所以增加了額外的工具FFRouterNavigation
來更方便地控制UIViewController
之間的跳轉(zhuǎn)。具體使用方法如下:
/** ?push?時(shí)是否自動隱藏底部TabBar ?@param?hide?是否自動隱藏,默認(rèn)為?NO ?*/ +?(void)autoHidesBottomBarWhenPushed:(BOOL)hide; /** ?獲取當(dāng)前?ViewController ?@return?當(dāng)前?ViewController ?*/ +?(UIViewController?*)currentViewController; /** ?獲取當(dāng)前?NavigationViewController ?@return?return?當(dāng)前?NavigationViewController ?*/ +?(nullable?UINavigationController?*)currentNavigationViewController; /** ?Push?ViewController ?@param?viewController?被?Push?的?ViewController ?@param?animated?是否使用動畫 ?*/ +?(void)pushViewController:(UIViewController?*)viewController?animated:(BOOL)animated; /** ?Push?ViewController,可設(shè)置當(dāng)前?ViewController?是否還保留 ?@param?viewController?被?Push?的?ViewController ?@param?replace?當(dāng)前?ViewController?是否還保留 ?@param?animated?是否使用動畫 ?*/ +?(void)pushViewController:(UIViewController?*)viewController?replace:(BOOL)replace?animated:(BOOL)animated; /** ?Push?多個(gè)?ViewController ?@param?viewControllers?ViewController?Array ?@param?animated?是否使用動畫 ?*/ +?(void)pushViewControllerArray:(NSArray?*)viewControllers?animated:(BOOL)animated; /** ?present?ViewController ?@param?viewController?被?present?的?ViewController ?@param?animated?是否使用動畫 ?@param?completion?回調(diào) ?*/ +?(void)presentViewController:(UIViewController?*)viewController?animated:(BOOL)animated?completion:(void?(^?__nullable)(void))completion; /** ?關(guān)閉當(dāng)前?ViewController,push、present?方式通用 ?@param?animated?是否使用動畫 ?*/ +?(void)closeViewControllerAnimated:(BOOL)animated;
感謝
FFRouter
實(shí)現(xiàn)方案參考了以下文章,在此表示感謝!
- LABVIEW NPOI庫文件下載 203次下載
- altium designer元件庫下載 742次下載
- AD 2D標(biāo)準(zhǔn)封裝庫下載 22次下載
- 蘋果ios藍(lán)牙調(diào)試助手工具源代碼下載 7次下載
- IRMCK/F171靈活易用的電機(jī)控制芯片 5次下載
- 選擇最簡單易用的HyperLynx進(jìn)行串?dāng)_仿真資料下載
- 基于信任機(jī)制與Rank閥值的安全RPL路由協(xié)議Sec-RPL 11次下載
- 如何使用OpenWRT路由器實(shí)現(xiàn)網(wǎng)絡(luò)存儲系統(tǒng)的設(shè)計(jì) 29次下載
- 兼容iOS 10的一些問題和使用資料整理合集
- AN1246中文手冊之如何在Microchip圖形庫中創(chuàng)建控件
- 通用封裝庫(protel/AD版本通用)資料下載 0次下載
- 在路由器上安裝IOS映像 0次下載
- AD6庫 5次下載
- 基于BGP協(xié)議屬性的路由策略 11次下載
- 路由控制和路由選擇
- 千兆路由器和百兆路由器的區(qū)別 萬兆路由器有什么好處? 2282次閱讀
- 路由重發(fā)布和路由匯總的概念 1664次閱讀
- 無模式數(shù)據(jù)庫的利與弊 528次閱讀
- 什么是路由表?IP路由表包含了哪些要素? 1.3w次閱讀
- 1000+常用Python庫一覽 1147次閱讀
- RabbitMQ中的路由模型(direct) 521次閱讀
- work庫在VHDL中的特殊用法 1025次閱讀
- Cargo如何訪問世界上最強(qiáng)大的3D庫 813次閱讀
- 關(guān)于路由策略數(shù)據(jù)庫(RPDB) 2163次閱讀
- 一文讀懂boost庫的概念和安裝方式 8016次閱讀
- 內(nèi)存數(shù)據(jù)庫系統(tǒng)全面解析 4248次閱讀
- 思科路由器多少錢_思科路由器優(yōu)勢有哪些_如何選擇選擇思科路由器 3209次閱讀
- 極路由和普通路由有什么區(qū)別 3062次閱讀
- 極路由怎么設(shè)置_極路由詳細(xì)設(shè)置圖文教程 12.6w次閱讀
- 動態(tài)路由特點(diǎn)及構(gòu)成 3364次閱讀
下載排行
本周
- 1AIWA J470維修手冊 (可直接打印)
- 3.16 MB | 3次下載 | 10 積分
- 2數(shù)能NU501系列恒流芯片型號選型表
- 0.04 MB | 2次下載 | 免費(fèi)
- 3Eurotherm TKS Temperature 用戶手冊
- 1.46 MB | 2次下載 | 免費(fèi)
- 4多值電場型電壓選擇晶體管結(jié)構(gòu)
- 0.11 MB | 1次下載 | 免費(fèi)
- 5MOSFET講解-01(可下載)
- 253.76 KB | 1次下載 | 免費(fèi)
- 6MOSFET講解-02(可下載)
- 263.46 KB | 1次下載 | 免費(fèi)
- 7MOSFET講解-03(可下載)
- 501.18 KB | 1次下載 | 免費(fèi)
- 8藍(lán)牙無線遙控小車
- 10.49 MB | 1次下載 | 2 積分
本月
- 1晶體三極管的電流放大作用詳細(xì)說明
- 0.77 MB | 32次下載 | 2 積分
- 2Python從入門到精通背記手冊
- 18.77 MB | 24次下載 | 1 積分
- 3雙極型三極管放大電路的三種基本組態(tài)的學(xué)習(xí)課件免費(fèi)下載
- 4.03 MB | 23次下載 | 1 積分
- 4第十一屆 藍(lán)橋杯 單片機(jī)設(shè)計(jì)與開發(fā)項(xiàng)目 省賽 程序設(shè)計(jì)試題及源碼
- 90.88KB | 23次下載 | 3 積分
- 5STM32F103C8T6開發(fā)板最小系統(tǒng)原理圖
- 0.78 MB | 23次下載 | 免費(fèi)
- 6多級放大電路的學(xué)習(xí)課件免費(fèi)下載
- 1.81 MB | 21次下載 | 2 積分
- 7九陽豆?jié){機(jī)高清原理圖
- 2.47 MB | 15次下載 | 1 積分
- 81875功放原理圖
- 0.04 MB | 11次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420063次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191382次下載 | 10 積分
- 5十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183337次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81585次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73814次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論