如何在布局类似于fork的UIViewControllers之间导航和传递数据?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在布局类似于fork的UIViewControllers之间导航和传递数据?相关的知识,希望对你有一定的参考价值。
我有几个像所示的UIViewControllers
我想要的是将数据从B传递到C并进行转换。到目前为止,我已经有两种可能的解决方案:
- 创建C
UIViewController
类的新实例(并保存其中的数据引用),从navigation controller
弹出B并将C推入其中。 - 将数据发送到A,从
navigation controller
弹出B然后,在A的viewWillAppear
方法中,检查数据是否为零,以确定是否应将其发送到C并执行segue
。
我应该采取这两种方法中的任何一种吗?或者是否有更优雅/适当的解决方案?
谢谢
答案
组织父控制器的数据管理器或使用核心数据。
如果将数据保存在父控制器中,请使用依赖注入,如here所述
以下是您案例的示例:
var dataFromC = "" // or nil
var dataFromB = "" // or nil
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "B",
let viewController = segue.destinationViewController as? BViewController {
viewController.dataFromC = self.dataFromC
// declare method in BViewController
// var method : ((String) -> ())? = nil
viewController.method = {[weak self] valueFromB in
self?.dataFromB = valueFromB
}
}
if segue.identifier == "C",
let viewController = segue.destinationViewController as? CViewController {
viewController.dataFromB = self.dataFromB
// declare method in CViewController
// var method : ((String) -> ())? = nil
viewController.method = {[weak self] valueFromC in
self?.dataFromC = valueFromC
}
}
}
如果要将值从BViewController
传递给父控制器,请使用self.method("yourValueFromB")
更改值。对于CViewController
的情况使用相同的方法。
另一答案
作为一般惯例,B应该在委托协议模式的帮助下将数据发送回其原始视图控制器A. A应该能够在委托方法实现中决定从B接收的数据以及在何处发送此数据,在本例中为C.
这样您的代码看起来更有条理。
以上是关于如何在布局类似于fork的UIViewControllers之间导航和传递数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Tailwind CSS 创建类似于 Quora 的居中 3 列布局
如何创建类似于 instagram 布局应用程序的手势驱动的动态可调整大小视图
如何在不更改标准输入缓冲的情况下 fork-then-execve?