如何将值从弹出视图控制器传递到上一个视图控制器?

时间:2016-12-07 08:24:37

标签: ios swift xcode uiviewcontroller swift3

所以在我的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)
}

哪个会弹出2ndViewController。在解雇Pop Up 2ndViewController后,我想检索我输入的值并在第一个视图控制器中使用它。

3 个答案:

答案 0 :(得分:2)

You can achieve this by either using delegate or completion handler.

Just create a delegate to handle your data on dismissing the second VC.

**

OR

**

Write a completion handler closure to get back those values in your first view controller.

答案 1 :(得分:2)

假设A& B是两个控制器,您首先使用一些数据从A导航到B.现在你想用一些数据从B到A进行POP。

Unwind Segues是最好的推荐方式。 以下是步骤。

  1. 打开A.m
  2. 定义以下方法

    @IBAction func unwindSegueFromBtoA(segue:UIStoryNoardSegue){

    }

  3. 打开故事板

  4. 选择B ViewController并单击ViewController outlet。按下控制键并拖动到“退出”键。插座,让鼠标留在这里。在下图中,所选图标为ViewController插座,最后一个带退出标志的图标为Exit Outlet。

  5. 您将看到“unwindSegueFromBtoA'弹出窗口中的方法。选择此方法。

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

  7. You View Hierarchy

    1. 选择此项并为其设置标识符。 (建议设置与方法相同的名称 - unwindSegueFromBtoA)

    2. 开放B.m.现在,无论您想要弹出哪个A.使用

      self.performSegueWithIdentifier(" unwindSegueFromBtoA",sender:dataToSend)

    3. 现在,当您弹出' A',' unwindSegueFromBtoA'方法将被调用。在' A'的unwindSegueFromBtoA中您可以访问' B'

    4. 的任何对象
    5. 那就是......!

答案 2 :(得分:0)

你总是可以在放松时使用放松来做一些事情

在您的第一个vc中声明IBAction

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

然后为popout viewcontroller创建exit segue 那么你可以像这样解除弹出

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

然后在prepareForSegue

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

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