如何優雅的實現界面跳轉 之 原生界面跳轉的統跳實踐 - DarwinNativeDispatcher
@author Jou Email Weibo or Github
預熱 - 我要解決的問題
app長大的過程中,也是我們痛苦的過程。如果不暫停一下重構代碼,以后開發的過程中會是分分鐘日了狗。
首先推薦Gaosboy的一篇文章解耦神器 —— 統跳協議和Rewrite引擎
文章中,介紹了天貓app,基于文件配置和uri的頁面跳轉。這大大增加了app端的靈活性, 而這種實現很類似今天的前端或后端開發中的 靜態路由 和 動態路由協議。
有了思想, 沒有實現, 所以DarwinNativeDispatcher是這種Thinking下的產物。
DarwinNativeDispatcher針對性的解決原生界面間的跳轉問題,但它并不涉及實現任何的路由協議。
為了更好地理解, 我舉個栗子(對是栗子):
場景0.
用戶重新登錄,需要重新布局根部的rootviewcontroller,如tabbarcontroller 并重新選到默認的第一項
場景1.
在某些特殊情況下, 你不得不在view中調用方法,跳轉界面。
場景2.
實現自定義的alert窗,常需要實現很多次要邏輯,如自定義window,
場景3.
在某些ue下,你需要替換rootcontroller
相信我, 在遇到類似問題的時候,你不必再在appdelegate 或 其分類中,寫跳轉邏輯,或是不停的獲取rootcontroller造成一些ugly的代碼。
你完全可以試試DarwinNativeDispatcher, 經過簡單的初始化,它可以輕松handle這些問題,包括聚美app的那種奇葩的結構。
在DarwinNativeDispatcher之后,我還在寫三個框架,他們分別是
- DarwinHybridDispatcher 針對web頁面的分派器
- DarwinReactDispatcher 針對react native頁面的分派器
- DarwinRouter 針對統跳的路由協議
如何使用 - DarwinNativeDispatcher
沒錯,DarwinNativeDispatcher在表現上,也是我鏈式編程的一次實踐。
- 引入DarwinNativeDispatcher
#import "DarwinNativeDispatcher.h"
- 如果你的rootcontroller是 tabbarcontroller 或是 navigationController
[DNDispatcher dispatcher].defaultTabbarController.pushViewController(controller);
// or
[DNDispatcher dispatcher].defaultNavigationController.pushViewController(controller);
- 替換rootcontroller
UIViewController *controller = [[UIViewController alloc]init];
controller.view.backgroundColor = [UIColor orangeColor];
[DNDispatcher dispatcher].rootViewController.replaceRootControllerWithController(controller);
- 實現自己的alert對話框
UIViewController *controller = [[UIViewController alloc]init];
controller.view.backgroundColor = [UIColor orangeColor];
[[DNDispatcher dispatcher].alertViewController clearColor];
//show it
[DNDispatcher dispatcher].alertViewController.show(controller);
//hide it
[[DNDispatcher dispatcher].alertViewController hide];
后言
DarwinNativeDispatcher 現在還沒有到1.0版本,還有很多可以想象的東西,歡迎讓他更加完善,和提pr。
DarwinNativeDispatcher's Github