Pop then push immediately with UINavigationController in iOS 8

在某些业务场景下,需要将一个 ViewController 从 NavigationController 里 pop 后,立即 push 进另一个 ViewController。在 iOS8 之前这不是什么问题,用以下代码即可轻松实现:

1
2
[navigationController popViewControllerAnimated:NO];
[navigationController pushViewController:newViewController animated:YES];

但在 iOS8 上这样无法实现,pop 后不会 push 另一个 ViewController。可以用以下方法实现,思路是直接修改 navigationController 里栈的数据(暂时没有找到其他更好的方法):

1
2
3
4
NSMutableArray *viewControllersInStack = [NSMutableArray arrayWithArray:navigationController.viewControllers];
[viewControllersInStack removeLastObject];
[viewControllersInStack addObject:newViewController];
[navController setViewControllers:viewControllersInStack animated:YES];