一、需求场景
- 第一个VC push 到 第二个VC;
-
在第二个VC中push出来第三个VC时,要先把第二个VC pop掉,因为需要对第三个VC 进行pop时,返回到的是第一个VC
二、第一版方案
ThirdViewController *vc = [[ThirdViewController alloc] init];
// 先pop掉第二个VC
[self.navigationController popViewControllerAnimated:YES];
// 再push出第三个VC
[self.navigationController pushViewController:vc animated:YES];
这样写的话,会有第一个VC一闪而过的画面,体验很不友好👇
三、优化后的方案
// 将要push到的vc
ThirdViewController* targetVC =[[ThirdViewController alloc] init];
// 获取当前路由的控制器数组
NSMutableArray *vcArray = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
// 打印当前路由的控制器数组
// NSLog(@"==the vcArray is %@", vcArray);
// 移除当前控制器
[vcArray removeObject:self];
// 添加新控制器
[vcArray addObject:targetVC];
// 打印新增后的控制器数组
// NSLog(@"新增后的 ==the vcArray is %@", vcArray);
// 重新设置当前导航控制器的路由数组
[self.navigationController setViewControllers:vcArray animated:YES];
-
看下控制台打印的控制器数组⬇️
这样写,跳转就是润物细无声丝滑般流畅了,👇