【问题标题】:Pass values to previous view controller in a navigationviewcontroller stack将值传递给导航视图控制器堆栈中的前一个视图控制器
【发布时间】:2023-03-08 12:51:01
【问题描述】:

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

【问题讨论】:

  • 可以使用NSNotificationCenter在viewDidDisappear方法中发布对象
  • 是的,viewDidDisappear,非常感谢!

标签: ios objective-c uinavigationcontroller segue uistoryboardsegue


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

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

    【讨论】:

      猜你喜欢
      • 2011-09-08
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      相关资源
      最近更新 更多