PushView Navigation 无需重新初始化 UIViewController 中的对象

PushView Navigation without reinitializing objects in UIViewController

我只需要在不重新初始化对象的情况下进行导航,这可以通过 popview 导航来完成,但我需要导航到指定的 ViewController 而不是以前的视图控制器。我已经发布了另一个 question 仍然没有回复

如果您使用的是界面生成器:

在要导航回的视图控制器的实现 (.m) 文件中,添加此方法:

-(IBAction)prepareForUnwind<NameOfViewController>:(UIStoryboardSegue *)segue
{

}

没有 < >。然后,在您尝试从中导航的视图的 Interface Builder 上,您需要创建一个退出 segue。如果你有一个取消按钮,你可以按住 ctrl 并拖动到视图控制器最顶部的小橙色退出符号,然后释放并 select 你创建的 prepareForUnwind 方法。如果你没有专门让你后退的按钮,并且你想以编程方式执行此操作,你可以 ctrl + 从视图控制器顶部的黄色图标拖动到橙色退出图标,select unwind 方法,然后查看刚刚创建的 segue 的视图层次结构。单击它,然后转到属性检查器并更改标识符。然后,在您导航的视图控制器的实现文件中,调用此方法:

[self performSegueWithIdentifier:@"whateverYouNamedIt" sender:self];

像这样的 unwind segue 向后遍历您的堆栈,直到它找到一个具有您调用的 unwind 方法的视图控制器,然后弹出该视图控制器和您当前的视图控制器之间的所有视图控制器。您可以在每个视图控制器上都有一个 prepareForUnwind<NameOfViewController> 方法,并使用它向后移动。它使故事板看起来更清晰,因为展开的 segues 不会显示在视图层次结构中。

edit - 只是想补充一点,如果你想将任何信息从源视图控制器传递到目标视图控制器,你可以在目标视图控制器的 prepareForUnwindSegue 方法中进行,就像你使用的一样源视图控制器中的 prepareForSegue 方法向前推进。这是一个例子:

-(IBAction)PrepareForUnwindHome:(UIStoryboardSegue *)segue
{
    OtherViewController *sourceView = segue.sourceViewController;
    _NSStringVariable = sourceView.NSStringVariable;
}

这会将您导航回的前一个视图控制器上的 NSStringVariable 设置为您导航的源视图控制器中的 NSStringVariable。