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

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

【问题讨论】:

  • 您已经做过或尝试过什么?发布您的代码....

标签: ios objective-c uiviewcontroller uinavigationcontroller


【解决方案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。

【讨论】:

    猜你喜欢
    • 2020-10-13
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多