一、需求場(chǎng)景
- 第一個(gè)VC push 到 第二個(gè)VC;
-
在第二個(gè)VC中push出來第三個(gè)VC時(shí),要先把第二個(gè)VC pop掉,因?yàn)樾枰獙?duì)第三個(gè)VC 進(jìn)行pop時(shí),返回到的是第一個(gè)VC
需求
二、第一版方案
ThirdViewController *vc = [[ThirdViewController alloc] init];
// 先pop掉第二個(gè)VC
[self.navigationController popViewControllerAnimated:YES];
// 再push出第三個(gè)VC
[self.navigationController pushViewController:vc animated:YES];
這樣寫的話,會(huì)有第一個(gè)VC一閃而過的畫面,體驗(yàn)很不友好??
三、優(yōu)化后的方案
// 將要push到的vc
ThirdViewController* targetVC =[[ThirdViewController alloc] init];
// 獲取當(dāng)前路由的控制器數(shù)組
NSMutableArray *vcArray = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
// 打印當(dāng)前路由的控制器數(shù)組
// NSLog(@"==the vcArray is %@", vcArray);
// 移除當(dāng)前控制器
[vcArray removeObject:self];
// 添加新控制器
[vcArray addObject:targetVC];
// 打印新增后的控制器數(shù)組
// NSLog(@"新增后的 ==the vcArray is %@", vcArray);
// 重新設(shè)置當(dāng)前導(dǎo)航控制器的路由數(shù)組
[self.navigationController setViewControllers:vcArray animated:YES];
-
看下控制臺(tái)打印的控制器數(shù)組??控制臺(tái)打印的VC數(shù)組
這樣寫,跳轉(zhuǎn)就是潤(rùn)物細(xì)無聲絲滑般流暢了,??

