【问题标题】:How to avoid a trail of delegate calls in a navigation stack?如何避免导航堆栈中出现一系列委托调用?
【发布时间】:2020-05-01 22:19:22
【问题描述】:

我在视图 A 上有搜索结果。我在搜索结果上有一个过滤选项。当用户单击过滤器视图 A 时,他会看到列出所有过滤器选项的视图 B。单击 B 上的过滤器会将用户带到视图 C,其中显示了每个过滤器的选择。当用户在视图 C 上选择过滤器时,我想将其传递回 A,以便当用户返回视图 A 时,在选择过滤器后,在应用所选过滤器后更新 A 上的结果数据。

如何以其他最简单的方式做到这一点?

【问题讨论】:

  • 我们不能直接从 C 到 A.. 我们可以通过调用 popToRootViewController() 直接到 A 但是.. 在你的情况下.. 你想向 A 发送参数..对吗?
  • 是的,我需要将参数从C发送到A。
  • 所以它要求不从 C 调用 A 吗?您可以使用这些参数再次推送 A 吗?
  • 你可以考虑“协调器”模式。如果您搜索 MVVM-C,您会看到那里概述的想法。
  • @Rob 给了你一个搜索 coordinator 模式的想法

标签: ios swift delegates protocols


【解决方案1】:

有很多方法。我会分享最简单的。创建一个模态结构,从视图控制器 C 更新它的值,然后在 A 中使用它。

 struct StudentData { 
    static var name = ""
    static var address = ""
 }

在 View Controller C 中,更新值

StudentData.name = "your name" 
StudentData.address = "your address"

在视图控制器 A 中,

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    nameField.text = StudentData.name
    addressField.text = StudentData.address
}

【讨论】:

  • 是真码吗?它会起作用吗?我没有看到任何 StudentData 类型的变量?
  • 抱歉忽略以上评论。我明白你在说什么。在我的情况下,我想要传递的参数是结构本身。如何处理?
  • 结构名称 { 变量名称:字符串? var isPresent:布尔? } var nameArray = [名称]()
  • 把它们设为static var,你就可以开始了......你可以在你的 ViewControllerA 中使用它,如上图所示.....
猜你喜欢
  • 2010-12-04
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 2015-04-22
  • 2014-04-17
  • 2011-11-23
  • 2011-09-21
  • 2014-04-13
相关资源
最近更新 更多