如何将推入导航堆栈的VC移到最顶层?
假设我按此顺序推送
Push VC1
Push VC 2
Push VC 3
所以现在我现在有VC3在上面。 如何以编程方式将VC2引入前端?这样堆栈就变成了
VC1,VC3,VC2
答案 0 :(得分:3)
作为开发人员,您可以通过管理其viewControllers数组来访问导航控制器堆栈:
NSArray *currentStack = self.navigationController.viewControllers
讨论根视图控制器位于数组中的索引0处 后视图控制器位于索引n-2,顶层控制器位于 index n-1,其中n是数组中的项数。
为此属性分配新的视图控制器数组是 相当于调用setViewControllers:animated:方法 动画参数设置为false。
这是一个简单的数组,它保存当前在nav的堆栈中的vcs 你可以像其他人一样管理这个数组:
NSMutableArray *tempArray = [NSMutableArray arrayWithArray: currentStack];
[tempArray removeObjectAtIndex:1];
[tempArray addObject:secondVC];
self.navigationController.viewControllers = tempArray;
您可以使用一组可用的方法:
希望有所帮助)
答案 1 :(得分:1)
据我所知,你没有。
您需要使用popToViewController:animated:
弹出到VC1。然后你的视图控制器堆栈将是
VC1
root view controller
(你说你推了VC1。导航控制器有一个根视图控制器,它始终位于堆栈的底部。)
正如@AlexKosyakov指出的那样, 可以通过操纵数组来编辑导航控制器的导航堆栈。 (尊敬和投票给他指出这一点。)
但是,我会说你应该不这样做。导航堆栈是Apple提供的用户界面模型,可提供一致的用户体验,并为用户创建期望。如果我看到导航堆栈的视觉提示(推动动画,后退按钮等),那么我有意识,有意识或无意识,按下后退按钮将带我回到上一个屏幕,并且屏幕的顺序堆栈不会从我下面改变。
答案 2 :(得分:1)
首先,我要说明这是一件非常不寻常的事情。通常情况下,你只需从堆栈中弹出VC 3即可返回。
也就是说,您可以从vc3.navigationController.viewControllers获取视图控制器数组,重新排列数组中的项目并在导航控制器上重新设置viewControllers属性。