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

Posted

技术标签:

【中文标题】PushView Navigation 无需重新初始化 UIViewController 中的对象【英文标题】:PushView Navigation without reinitializing objects in UIViewController 【发布时间】:2015-04-06 04:39:41 【问题描述】:

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

【问题讨论】:

您已经做过或尝试过什么?发布您的代码.... 【参考方案1】:

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

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

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



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

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

像这样的 unwind segue 会向后遍历您的堆栈,直到找到具有您调用的 unwind 方法的视图控制器,然后弹出该视图控制器和当前视图控制器之间的所有视图控制器。您可以在每个视图控制器上都有一个 prepareForUnwind&lt;NameOfViewController&gt; 方法,并使用它来倒退。它使情节提要看起来更干净,因为展开转场只显示在视图层次结构中。

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

-(IBAction)PrepareForUnwindHome:(UIStoryboardSegue *)segue

    OtherViewController *sourceView = segue.sourceViewController;
    _NSStringVariable = sourceView.NSStringVariable;

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

【讨论】:

以上是关于PushView Navigation 无需重新初始化 UIViewController 中的对象的主要内容,如果未能解决你的问题,请参考以下文章

UITabBarcontroller、UITableView 和 pushView

故事板中 didselectrowatindexpath 上的 Pushview

ios 将 TextView 从 PushView 传递给 PresentingView

使用 React Navigation 导航堆栈时重新渲染组件

Jetpack Navigation Drawer 总是重新创建片段

react-native初体验 — 认识路由