我希望将一个视图推到导航控制器堆栈中,但删除当前视图,这样当用户在下一个视图上按返回按钮时,就不会回到先前的视图。
流程方向可以是以下之一:
但是相反方向的流动总是像这样:
问题是我想在View 2 Controller上处理它,在View 3上做这件事很容易覆盖后退按钮操作。View 3可以是许多不同的视图,我不想为所有这些视图覆盖后退按钮并检查堆栈的前一个控制器是否是View 2 Controller。它们都有相同的父类,所以我不能为“View 3类”控制器仅覆盖后退按钮。
我已经尝试了这个方法,以便View 2的控制器不会被添加到导航堆栈中:
流程方向可以是以下之一:
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 Controller。它们都有相同的父类,所以我不能为“View 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];