繁体   English   中英

如何在布局类似于叉子的UIViewControllers之间导航和传递数据?

[英]How to navigate and pass data between UIViewControllers whose layout resembles a fork?

我有几个如图所示的UIViewControllers

货叉布局

我想要的是将数据从B传递到C,然后执行该转换。 到目前为止,我提供了两种可能的解决方案:

  1. 创建C UIViewController类的新实例(并在其中保存数据引用),从navigation controller弹出B并将C推入其中。
  2. 将数据发送到A,从navigation controller弹出B,然后在A的viewWillAppear方法中检查数据是否为nil,以了解是否应将其发送给C并执行segue

我应该采用这两种方法中的任何一种吗? 还是针对这种情况有更优雅/合适的解决方案?

谢谢

组织上级控制器的数据管理器或使用核心数据。

如果将数据保留在父控制器中,请使用此处所述的依赖项注入

这是您的情况的示例:

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)。

这样,您的代码看起来更有条理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM