iOS頁面跳轉(zhuǎn)方式(2)—— HHRouter

URL Router 可以將 UIViewController 映射成 URL,從而支持通過 URL 進(jìn)行界面跳轉(zhuǎn)霉祸,類似 Web 一樣筑累。URL Router 有著許多切實(shí)的好處。

一丝蹭、URL Router優(yōu)勢(shì)

1慢宗、減少 UIViewController 之間的耦合。在沒有 URL Router 的世界奔穿,如果 aViewController 需要跳轉(zhuǎn)到 bViewController镜沽,就必須依賴于后者,這很容易就造成錯(cuò)綜復(fù)雜的依賴鏈巫橄。引入 URL Router 后淘邻,這些鏈條自然就被斬?cái)唷?br> 需求場(chǎng)景:實(shí)現(xiàn)由controllerA跳轉(zhuǎn)到controllerB茵典,且為controllerB的各項(xiàng)屬性完成賦值操作(bVC的屬性變化較頻繁)湘换。

a. 在常規(guī)開發(fā)中,為了適應(yīng)controllerB不斷變化的屬性统阿,我們需要同時(shí)修改controllerA中的跳轉(zhuǎn)方法(因跳轉(zhuǎn)依賴后者彩倚,即controllerB)和controllerB的屬性聲明,controllerA和controllerB的耦合性較大扶平,在實(shí)現(xiàn)需求的過程中增價(jià)了開發(fā)的強(qiáng)度帆离。

b. 使用URL Router后,應(yīng)對(duì)controllerB不斷變化的屬性结澄,我們只需要修改controllerB即可哥谷,controllerB需要的各項(xiàng)參數(shù)可以通過URL Router的參數(shù)完成傳遞岸夯,大大降低了兩者的耦合性。

2们妥、使用URL Router后猜扮,每個(gè)界面都擁有唯一且不重復(fù)的 URL ,你將更容易實(shí)現(xiàn)這些以下需求:Push 打開指定的界面监婶、追蹤用戶瀏覽記錄旅赢、開放 URL Scheme等。

二惑惶、HHRouter使用詳解

1煮盼、這里使用cocoaPods演示使用過程,新建項(xiàng)目RouterDemo带污,編輯Podfile文件如下:

platform :ios, '7.0'

target 'RouterDemo' do
pod 'HHRouter', '~> 0.1.8'
end

執(zhí)行cocoa pods安裝命令僵控,安裝HHRouter。

2刮刑、在ViewController.m引入頭文件:
#import <HHRouter/HHRouter.h>
添加如下測(cè)試方法:
- (void)testMethod
{
[[HHRouter shared] map:@"/user/:userId/" toControllerClass:[UserViewController class]];
UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(20, 100, 100, 40)];
[self.view addSubview:btn];
[btn setTitle:@"Skip" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor purpleColor] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(skip) forControlEvents:UIControlEventTouchUpInside];
}

- (void)skip
{
    UIViewController *viewController = [[HHRouter shared] matchController:@"/user/10/"];
    //    XCTAssertEqualObjects([viewController class], [UserViewController class]);
    //    XCTAssertEqualObjects(viewController.params[@"route"], @"/user/1/");
    //    XCTAssertEqualObjects(viewController.params[@"userId"], @"1");

    [self.navigationController pushViewController:viewController animated:YES];
}

即可利用“/user/10/”為鏈接跳轉(zhuǎn)到UserViewController喉祭,且傳遞參數(shù)userId=10。

3雷绢、在UserViewController中接收url傳過來的參數(shù)泛烙;
a. 在UserViewController.h中添加屬性

@property (nonatomic, strong)   NSDictionary *params;

b. 在UserViewController.m添加實(shí)現(xiàn)
- (void)setParams:(NSDictionary *)params
{
_params = params; // 為私有屬性賦值
NSLog(@"Params: %@", params);
}

三、HHRouter原理分析

更多詳情請(qǐng)參照git文檔:https://github.com/Huohua/HHRouter

筆者根據(jù)HHRouter的原理翘紊,使用值傳遞蔽氨、面向協(xié)議的方式,基于swift4.0對(duì)其進(jìn)行了重寫帆疟,有興趣的同學(xué)可以參考:https://github.com/Andy-Swift/ASRouterDemo

如有不當(dāng)之處鹉究,歡迎各位同學(xué)討論指導(dǎo)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末踪宠,一起剝皮案震驚了整個(gè)濱河市自赔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柳琢,老刑警劉巖绍妨,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異柬脸,居然都是意外死亡他去,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門倒堕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灾测,“玉大人,你說我怎么就攤上這事垦巴∠碧拢” “怎么了铭段?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)秦爆。 經(jīng)常有香客問我稠项,道長(zhǎng),這世上最難降的妖魔是什么鲜结? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任展运,我火速辦了婚禮,結(jié)果婚禮上精刷,老公的妹妹穿的比我還像新娘拗胜。我一直安慰自己,他們只是感情好怒允,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布埂软。 她就那樣靜靜地躺著,像睡著了一般纫事。 火紅的嫁衣襯著肌膚如雪勘畔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天丽惶,我揣著相機(jī)與錄音炫七,去河邊找鬼。 笑死钾唬,一個(gè)胖子當(dāng)著我的面吹牛万哪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抡秆,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼奕巍,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了儒士?” 一聲冷哼從身側(cè)響起的止,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎着撩,沒想到半個(gè)月后诅福,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睹酌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年权谁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了剩檀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片憋沿。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沪猴,靈堂內(nèi)的尸體忽然破棺而出辐啄,到底是詐尸還是另有隱情采章,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布壶辜,位于F島的核電站悯舟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏砸民。R本人自食惡果不足惜抵怎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岭参。 院中可真熱鬧反惕,春花似錦、人聲如沸演侯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秒际。三九已至悬赏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娄徊,已是汗流浹背闽颇。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寄锐,地道東北人进萄。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像锐峭,于是被迫代替她去往敵國(guó)和親中鼠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容