导语
导航控制器的viewControllers是一个栈,当push一个新控制器的时候,这个控制器就会进栈,且位于栈顶,而window每次显示的都是处于栈顶的控制器,而当pop的时候,被pop的控制器会从栈中移除,出栈,新的控制器就会成为栈顶的控制器,从而被window显示。根据这个原理,我们就可以在pop跳转的时候做一些改变。
pop一个新控制器
一般来说,我们的做法都是通过push来进入一个新的控制器,pop来返回上一个控制器,但是如果有需要通过pop来进入一个新的控制器的话,也可以做到。
navigationController的viewcontrollers是一个数组,当我们需要pop进入一个新的控制器的时候,只需要在当前的控制器的前面插入一个新的控制器即可。当pop的时候,当前控制器出栈,新控制器成为栈顶被显示。
代码如下:
InsertViewController *insertVC = [[InsertViewController alloc] init];
NSMutableArray *arrM = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
[arrM insertObject:insertVC atIndex:self.navigationController.viewControllers.count - 1];
self.navigationController.viewControllers = arrM.copy;
[self.navigationController popViewControllerAnimated:YES];
pop到根控制器
[self.navigationController popToRootViewControllerAnimated:YES];
pop到指定控制器
UIViewController *vc = self.navigationController.viewControllers[1];
[self.navigationController popToViewController:vc animated:YES];