PushView导航无需在UIViewController中重新初始化对象

时间:2015-04-06 04:39:41

标签: ios objective-c uiviewcontroller uinavigationcontroller

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

1 个答案:

答案 0 :(得分:0)

如果您使用的是Interface Builder:

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

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

}

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

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

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

编辑 - 只是想添加一个,如果你想将任何信息从源视图控制器传递到目标视图控制器,你可以在目标视图控制器的prepareForUnwindSegue方法内部进行,就像你使用它一样在源视图控制器中前进的prepareForSegue方法。这是一个例子:

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

在先前的视图控制器上设置NSStringVariable,您将从导航的源视图控制器导航回NSStringVariable。