如何将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的值,并在我的第一个视图控制器中使用它。
您可以通过使用delegate
或completion handler
来实现此目的。
只需创build一个代表来处理你的数据,解散second VC
。
**
要么
**
编写一个completion handler
closure
来取回你的第一个view controller
值。
假设A和B是两个控制器,你首先用一些数据从A到B导航。 而现在你想从B到A的POP用一些数据。
展开Segues是做到这一点的最佳和推荐的方式。 这是步骤。
- 打开上午
-
定义下面的方法
@IBAction func unwindSegueFromBtoA(segue:UIStoryNoardSegue){
}
-
打开故事板
-
selectB ViewController并点击ViewControllersockets。 按控制键并拖动到“退出”出口,并将鼠标留在这里。 在下图中,所选的图标是ViewControllersockets,最后一个带有Exit标志的是Exit Outlet。
-
您将在popup窗口中看到“unwindSegueFromBtoA”方法。 select这个方法。
-
现在,您将在左侧的视图控制器层次结构中看到一个segue。 您将在下面的图像中看到您在StoryBoard Entry Piont附近创build的Segue。
-
select此项并为其设置一个标识符。 (build议设置方法相同的名字 – unwindSegueFromBtoA)
-
打开Bm。 现在,无论你想stream行到A.使用
self.performSegueWithIdentifier(“unwindSegueFromBtoA”,sender:dataToSend)
-
现在当你popup到'A'时,'unwindSegueFromBtoA'方法将被调用。 在“A”的unwindSegueFromBtoA中,您可以访问任何“B”的对象。
-
而已..!
你可以随时放松,做一些放松的东西
在你的第一个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并做一些更容易的事情