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<NameOfViewController>
方法,并使用它来倒退。它使情节提要看起来更干净,因为展开转场只显示在视图层次结构中。
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 导航堆栈时重新渲染组件