我有一个NavigationController
下面的VC被嵌入:VC1->VC2->VC3->VC4->VC5。我的问题是,当我从VC5退出时(编辑完成后),我会将您发送回VC3,但我希望以编程方式将VC4和VC5从堆栈中丢弃,即当用户被发送回VC3时,我希望navagitionBar
中的“back”将您带到VC2(而不是您真正来自的VC5)。
这在IOS中经常出现,在IOS中,您希望编辑模型,然后将它们发送回tableView/Collection视图,但是由于编辑已经完成,您不希望导航堆栈中的编辑viewControllers再出现,因为它太混淆了用户体验。
在下面的屏幕截图中,右上角的VC是VC5:,它通过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
希望这会有帮助:)