【问题标题】:Swift: How to pass data when popping view controllerSwift:弹出视图控制器时如何传递数据
【发布时间】:2021-06-25 02:23:33
【问题描述】:

我想在弹出视图控制器时将数据从 childVC 传递到 parentVC。

ChildViewController { /处理数据/ //获取数据值
值 = 123 self.navigationController?.popViewController(动画: 真的)}

ParentViewController { //使用来自子 vc(value 123) 的值 }

如何将数据传回以在 ParentViewController 中使用?

【问题讨论】:

标签: ios swift navigationcontroller popviewcontroller


【解决方案1】:

您可以使用转场,并在弹出新视图控制器之前为转场做好准备。

在 VC1 中

performSegue(withIdentifier: "toVC2", sender: self)

let dataInVC1 = "wow"

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "toVC2" {
        let vc = segue.destination as SecondViewController
         vc?.someData = dataInVC1
}

在 VC2 中

var someData: String?

【讨论】:

    【解决方案2】:

    最简单的方法是在子节点上使用回调闭包属性。设置子视图控制器时从父级设置它。当孩子完成后,检查回调是否为 != nil(如果是可选的),如果是,则在弹出之前调用它。

    【讨论】:

      【解决方案3】:

      您还可以创建自定义处理程序以在弹出后完成。这是一个例子:

      extension UINavigationController {
      
      func popViewControllerWithHandler(animated:Bool = true, completion: @escaping ()->()) {
          CATransaction.begin()
          CATransaction.setCompletionBlock(completion)
          self.popViewController(animated: animated)
          CATransaction.commit()
      }
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多