从导航堆栈中删除viewcontrollers

我有一个导航堆栈,说5个UIViewControllers。 我想通过点击第五个viewcontroller中的一个button来删除堆栈中的第三个和第四个viewcontroller。 是否有可能做到这一点? 如果这样怎么样?

使用此代码并享受:

NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers]; // [navigationArray removeAllObjects]; // This is just for remove all view controller from navigation stack. [navigationArray removeObjectAtIndex: 2]; // You can pass your index here self.navigationController.viewControllers = navigationArray; [navigationArray release]; 

希望这会帮助你。

您可以先获取数组中的所有视图控制器,然后在检查相应的视图控制器类之后,可以删除所需的视图控制器。

这是一小段代码:

 NSArray* tempVCA = [self.navigationController viewControllers]; for(UIViewController *tempVC in tempVCA) { if([tempVC isKindOfClass:[urViewControllerClass class]]) { [tempVC removeFromParentViewController]; } } 

我想这会让你的工作更轻松。

Swift 3:

self.navigationController!.viewControllers.removeAll()

self.navigationController?.viewControllers.remove(at: "insert here a number")

Swift 2.1:

移除所有:

self.navigationController!.viewControllers.removeAll()

删除索引

self.navigationController?.viewControllers.removeAtIndex("insert here a number")

还有更多可能的操作,比如removeFirst,range等

Swift 2.0:

  var navArray:Array = (self.navigationController?.viewControllers)! navArray.removeAtIndex(navArray.count-2) self.navigationController?.viewControllers = navArray 

如果你想从第五视图控制器移动到第二视图控制器(跳过第三和第四),你想使用[self.navigationController popToviewController:secondViewController]

您可以从导航控制器堆栈中获取第二个控制器。

 secondViewController = [self.navigationController.viewControllers objectAtIndex:yourViewControllerIndex];