這篇文章主要介紹了FFRouter怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
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<NSString *, id> *)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<NSString *, id> *)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<NSDictionary *> *)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<NSDictionary *> *)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=原子彈
3、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怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。