我想将视图推送到导航控制器堆栈中,但删除当前视图,这样当用户按下下一个视图时,它不会将他们带到上一个视图。
一个方向的流动可能是以下之一:
View X -> View 1 -> View 2 -> View 3
View X -> View 1 -> View 3
但相反方向的流动总是这样:
View X <- View 1 <- View 3
问题是我想在 View 2 Controller 上处理它,在 View 3 上处理它很容易覆盖后退按钮操作。View 3 可以是很多不同的视图,我不想覆盖所有视图的后退按钮并检查堆栈的前一个控制器是否是 View 2 控制器。它们都有相同的父类,所以我不能只为“查看 3 类”控制器覆盖后退按钮。
我已经尝试过了,所以 View 2 的控制器没有添加到导航堆栈中:
//Pop controller from stack before pushing
[self.navigationController popViewControllerAnimated:YES];
[self.navigationController pushViewController:controller animated:YES];
但是一旦你弹出它会删除视图并且不会推送到下一个控制器
具有相同结果的其他选项
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];
[viewControllers removeObjectIdenticalTo:self];
self.navigationController.viewControllers = viewControllers;
[self.navigationController pushViewController:controller animated:YES];