如果您使用的是界面生成器:
在您要导航回的视图控制器的实现 (.m) 文件中,添加此方法:
-(IBAction)prepareForUnwind<NameOfViewController>:(UIStoryboardSegue *)segue
{
}
没有 。然后,在您尝试从中导航的视图的界面构建器上,您需要创建一个退出转场。如果你有一个取消按钮,你可以 ctrl + 拖动到视图控制器顶部的小橙色退出符号,然后释放并选择你创建的 prepareForUnwind 方法。如果您没有专门让您后退的按钮,并且您想以编程方式执行此操作,您可以 ctrl + 从视图控制器顶部的黄色图标拖动到橙色退出图标,选择展开方法,然后查看您刚刚创建的 segue 的视图层次结构。单击它,然后转到属性检查器并更改标识符。然后,在您从中导航的视图控制器的实现文件中,调用此方法:
[self performSegueWithIdentifier:@"whateverYouNamedIt" sender:self];
像这样的 unwind segue 会向后遍历您的堆栈,直到找到具有您调用的 unwind 方法的视图控制器,然后弹出该视图控制器和当前视图控制器之间的所有视图控制器。您可以在每个视图控制器上都有一个 prepareForUnwind<NameOfViewController> 方法,并使用它来倒退。它使情节提要看起来更干净,因为展开转场只显示在视图层次结构中。
edit - 只是想补充一点,如果您想将任何信息从源视图控制器传递到目标视图控制器,您可以在目标视图控制器的 prepareForUnwindSegue 方法中执行此操作,就像您使用 prepareForSegue 方法一样在向前移动的源视图控制器中。这是一个例子:
-(IBAction)PrepareForUnwindHome:(UIStoryboardSegue *)segue
{
OtherViewController *sourceView = segue.sourceViewController;
_NSStringVariable = sourceView.NSStringVariable;
}
这会将您导航回的前一个视图控制器上的 NSStringVariable 设置为从您导航的源视图控制器的 NSStringVariable。