将值传递给导航视图控制器堆栈中的前一个视图控制器

Posted

技术标签:

【中文标题】将值传递给导航视图控制器堆栈中的前一个视图控制器【英文标题】:Pass values to previous view controller in a navigationviewcontroller stack 【发布时间】:2014-07-12 11:09:36 【问题描述】:

在 UINavigationViewController 中,如果我想将值从一个控制器传递到下一个控制器,只需调用 - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender ,但是如果我想将值从一个 viewController 传递到前一个 viewController 该怎么办

【问题讨论】:

可以使用NSNotificationCenter在viewDidDisappear方法中发布对象 是的,viewDidDisappear,非常感谢! 【参考方案1】:

我记得在几个项目中遇到过同样的问题。我找不到我的代码来回答这个问题,但我确实找到了一些教程。

http://prateekvjoshi.com/2014/02/16/ios-app-passing-data-between-view-controllers/

http://www.infragistics.com/community/blogs/torrey-betts/archive/2014/05/29/passing-data-between-view-controllers-ios-obj-c.aspx

【讨论】:

OP 的关键问题是何时调用这些委托方法(教程在UINavigationController 案例中只字未提) 两个教程都提到了使用委托,这有点困难但会工作,非常感谢 废话,我还以为当前viewcontroller出栈的时候会有一个delegate方法回调,但是没找到 检查UINavigationControllerDelegate 只写在viewDidDisappear中【参考方案2】:

因此委托的概念来自segues。 基本上,Segues 是从一个视图过渡到另一个视图,但子视图位于父视图之上(在堆栈内),因此仍加载父视图。 因此,如果您将 segues 放在任何地方并在它们之间传递值,那么对象将继续创建并存储在堆栈中,从而循环继续。

所以引入了代表。 委托是子视图控制器(后一个)使用内置委托方法或自创协议方法向前一个视图控制器(第一个)发送信息的方法。

这里发送信息(稍后查看)声明了一个委托对象和一个委托方法。 然后由接收类(第一个视图)实现。所以即使后面的视图从堆栈中弹出后,信息也会通过委托方法发送回根视图。

浏览文档,它以更合适的方式给出 希望这会有所帮助

【讨论】:

【参考方案3】:

将前一个视图控制器设置为当前视图控制器的委托,并传递您想要的任何值。这是标准方法。

【讨论】:

以上是关于将值传递给导航视图控制器堆栈中的前一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

跳转到导航堆栈中的某个点

选择时将值从 TabBarController 传递给子视图控制器

如何将值传递给另一个视图控制器?

将值从一个视图控制器传递到另一个视图控制器的问题

如何在将数据推送到导航堆栈之前将数据传递给视图控制器并加载它?

无法快速显示第一个视图控制器将值传递给第二个视图控制器