[英]PushView Navigation without reinitializing objects in UIViewController
如果使用的是Interface Builder:
在要导航回的视图控制器的实现(.m)文件中,添加以下方法:
-(IBAction)prepareForUnwind<NameOfViewController>:(UIStoryboardSegue *)segue
{
}
没有<>。 然后,在要尝试从其导航的视图的“界面生成器”上,需要创建一个退出界面。 如果有取消按钮,则可以按住Ctrl并拖动到视图控制器顶部的橙色小退出符号,然后释放并选择创建的prepareForUnwind方法。 如果没有专门使您向后退的按钮,而您想以编程方式执行此操作,则可以按住Ctrl并从视图控制器顶部的黄色图标拖动到橙色退出图标,选择展开方法,然后查看刚刚创建的序列的视图层次结构。 单击它,然后转到属性检查器并更改标识符。 然后,在您要从中导航的视图控制器的实现文件中,调用此方法:
[self performSegueWithIdentifier:@"whateverYouNamedIt" sender:self];
这样的展开过程会一直向后遍历堆栈,直到找到具有您调用的unwind方法的视图控制器,然后弹出该视图控制器和当前视图控制器之间的所有视图控制器。 您可以在每个视图控制器上都有一个prepareForUnwind<NameOfViewController>
方法,并使用该方法进行倒退。 它使情节提要板看起来更加整洁,因为展开的序列不会显示在视图层次结构中。
编辑-仅想添加一下,如果要将任何信息从源视图控制器传递到目标视图控制器,请在目标视图控制器的prepareForUnwindSegue方法内部进行操作,就像在源代码中使用prepareForSegue方法一样视图控制器前进。 这是一个例子:
-(IBAction)PrepareForUnwindHome:(UIStoryboardSegue *)segue
{
OtherViewController *sourceView = segue.sourceViewController;
_NSStringVariable = sourceView.NSStringVariable;
}
这将在要导航的前一个视图控制器上将NSStringVariable设置为从要导航的源视图控制器回到NSStringVariable。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.