将视图控制器移动到导航堆栈iOS的顶部

时间:2016-05-04 19:44:23

标签: ios uiviewcontroller uinavigationcontroller

如何将推入导航堆栈的VC移到最顶层?

假设我按此顺序推送

Push VC1 
Push VC 2
Push VC 3

所以现在我现在有VC3在上面。 如何以编程方式将VC2引入前端?这样堆栈就变成了

VC1,VC3,VC2

3 个答案:

答案 0 :(得分:3)

作为开发人员,您可以通过管理其viewControllers数组来访问导航控制器堆栈:

NSArray *currentStack = self.navigationController.viewControllers

yeoman babel generator

  

讨论根视图控制器位于数组中的索引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;

您可以使用一组可用的方法:

enter image description here

希望有所帮助)

答案 1 :(得分:1)

据我所知,你没有。

您需要使用popToViewController:animated:弹出到VC1。然后你的视图控制器堆栈将是

  VC1
  root view controller

(你说你推了VC1。导航控制器有一个根视图控制器,它始终位于堆栈的底部。)

编辑:

正如@AlexKosyakov指出的那样, 可以通过操纵数组来编辑导航控制器的导航堆栈。 (尊敬和投票给他指出这一点。)

但是,我会说你应该这样做。导航堆栈是Apple提供的用户界面模型,可提供一致的用户体验,并为用户创建期望。如果我看到导航堆栈的视觉提示(推动动画,后退按钮等),那么我有意识,有意识或无意识,按下后退按钮将带我回到上一个屏幕,并且屏幕的顺序堆栈不会从我下面改变。

答案 2 :(得分:1)

首先,我要说明这是一件非常不寻常的事情。通常情况下,你只需从堆栈中弹出VC 3即可返回。

也就是说,您可以从vc3.navigationController.viewControllers获取视图控制器数组,重新排列数组中的项目并在导航控制器上重新设置viewControllers属性。