如何将popup视图控制器中的值传递给以前的视图控制器?

所以在我的1stViewController我有这样的代码:

@IBAction func colorDropdown(_ sender: Any) { self.popUpColorPicker() } func popUpColorPicker() { let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ColorPicker") as! ColorPicker self.addChildViewController(popOverVC) popOverVC.view.frame = self.view.frame self.view.addSubview(popOverVC.view) popOverVC.didMove(toParentViewController: self) } 

哪个会popup2ndViewController。 在解散Pop Up 2ndViewController时,我想检索我input的值,并在我的第一个视图控制器中使用它。

您可以通过使用delegatecompletion handler来实现此目的。

只需创build一个代表来处理你的数据,解散second VC

**

要么

**

编写一个completion handler closure来取回你的第一个view controller值。

假设A和B是两个控制器,你首先用一些数据从A到B导航。 而现在你想从B到A的POP用一些数据。

展开Segues是做到这一点的最佳和推荐的方式。 这是步骤。

  1. 打开上午
  2. 定义下面的方法

    @IBAction func unwindSegueFromBtoA(segue:UIStoryNoardSegue){

    }

  3. 打开故事板

  4. selectB ViewController并点击ViewControllersockets。 按控制键并拖动到“退出”出口,并将鼠标留在这里。 在下图中,所选的图标是ViewControllersockets,最后一个带有Exit标志的是Exit Outlet。

  5. 您将在popup窗口中看到“unwindSegueFromBtoA”方法。 select这个方法。

  6. 现在,您将在左侧的视图控制器层次结构中看到一个segue。 您将在下面的图像中看到您在StoryBoard Entry Piont附近创build的Segue。

您查看层次结构

  1. select此项并为其设置一个标识符。 (build议设置方法相同的名字 – unwindSegueFromBtoA)

  2. 打开Bm。 现在,无论你想stream行到A.使用

    self.performSegueWithIdentifier(“unwindSegueFromBtoA”,sender:dataToSend)

  3. 现在当你popup到'A'时,'unwindSegueFromBtoA'方法将被调用。 在“A”的unwindSegueFromBtoA中,您可以访问任何“B”的对象。

  4. 而已..!

你可以随时放松,做一些放松的东西

在你的第一个vc中声明一个IBAction

 var color: UIColor! @IBAction func unwindToCheckout(segue: UIStoryboardSegue) { //do some stuff with color } 

然后为popout viewcontroller创buildexit segue,然后你可以像这样closurespopout

 self.performSegueWithIdentifier("unwindToVC1", sender: selectedColor) 

然后在prepareForSegue

 if segue.identifier == "unwindToVC1" { (segue.destinationViewController as! FirstViewController).color = sender as! UIColor } 

你也可以创build委托来到达fistviewcontroller并做一些更容易的事情