iOS- 先pop掉当前controller, 再push的实现

一、需求场景

  • 第一个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];
  • 看下控制台打印的控制器数组⬇️
    控制台打印的VC数组

这样写,跳转就是润物细无声丝滑般流畅了,

你可能感兴趣的:(iOS- 先pop掉当前controller, 再push的实现)