我有一个NavigationController下面的VC被嵌入:VC1->VC2->VC3->VC4->VC5。我的问题是,当我从VC5退出时(编辑完成后),我会将您发送回VC3,但我希望以编程方式将VC4和VC5从堆栈中丢弃,即当用户被发送回VC3时,我希望navagitionBar中的“back”将您带到VC2(而不是您真正来自的VC5)。
这在IOS中经常出现,在IOS中,您希望编辑模型,然后将它们发送回tableView/Collection视图,但是由于编辑已经完成,您不希望导航堆栈中的编辑viewControllers再出现,因为它太混淆了用户体验。
在下面的屏幕截图中,右上角的VC是VC5:ios - 以编程方式定义新的导航 Controller 订单/堆栈?-LMLPHP,它通过self.performSegueWithIdentifier("backToPins", sender: self)返回到PinViewController(VC3)
我该怎么做?

最佳答案

不要使用segue返回(pop)。
您应该使用popToViewController并将特定的viewcontroller作为参数来弹出该viewcontroller。
例如,如果您想在五个视图控制器中选择第三个,则可以执行以下操作。您只需将view controller数组的索引更改为不同的viewcontroller。

let viewControllers: [UIViewController] = self.navigationController!.viewControllers as [UIViewController];
self.navigationController!.popToViewController(viewControllers[viewControllers.count - 3], animated: true);

如果您使用segue,则意味着您将(推)新的viewcontroller添加到导航堆栈中。在您的示例中,到达第五个视图后的堆栈如下所示,
VC1 - VC2 - VC3 - VC4 - VC5 (top of stack)
如果你想回到VC3,那么堆栈应该是这样的,
VC1 - VC2 - VC3 - VC4 - VC5 - VC3(top of stack)
如果你跳到VC3,你的堆栈就像,
VC1 - VC2 - VC3 (top of stack)
所以要返回的弹出式视图控件不使用segue
希望这会有帮助:)

10-05 21:17