如何在swift4中点击按钮时将第二个viewcontroller文本字段值传递给第一个viewcontroller数组并关闭

时间:2019-05-08 09:06:07

标签: arrays swift dismiss

我有两个视图控制器,我想将第二个viewcontroller文本字段值发送到第一个viewcontroller数组,并在点击按钮时关闭第二个viewcontroller。

这是我的代码:

在firstVC中:

我创建了数组:

var iteamsArr = [String]()

在secondVC中:

class CreatePopUpViewController: UIViewController {


var popData: String?
var createBussnss = CreateBusinessViewController()// is my firstVC name
@IBOutlet weak var addTf: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

@IBAction func saveButn(_ sender: Any) {

  createBussnss.iteamArray.append(addTf.text!)

    dismiss(animated: true, completion: nil)
}

}

在这里关闭了viewcontroller,但是没有将值添加到第一个viewcontroller中的arry中 请帮助我

2 个答案:

答案 0 :(得分:1)

使用委托。

protocol CreatePopUpDelegate: class {
     func createPopUpDidSaveTextFieldPick(_ value: String)
}

然后在第一个视图控制器中:

extension FirstViewController: CreatePopUpDelegate {
    func createPopUpDidSaveTextFieldPick(_ value: String) {
        print ("first view controller now has value of textfield")
        // add it to array or whatever
}

然后在第二个视图控制器中:

class CreatePopUpViewController: UIViewController, MyDelegate {
    weak var delegate: CreatePopUpDelegate?

@IBAction func saveButn(_ sender: Any) {

    createBussnss.iteamArray.append(addTf.text!)

    delegate?.createPopUpDidSaveTextFieldPick(addTf.text!)
    dismiss(animated: true, completion: nil)

}

您只需在代码中的某个地方做

secondViewController.delegate = firstViewController.

在这种情况下,secondViewController是从firstViewController实例化并显示的,因此您可以这样做:

secondViewController.delegate = self

此外,作为一般性建议,请准备《 Swift代码准则》。在Swift中,更清晰的名称是首选。

执行saveButn而不是saveButton

执行addTf而不是addTextField

执行createBussnss代替createBussiness

也要避免做!,最好不要做guard let text = textField.text else { return

祝你好运!  更清晰,更好的代码。

答案 1 :(得分:0)

您可以使用委托在两个控制器之间进行通信,现在,我们甚至可以对相同的控件使用闭包。 您需要在第二个ViewController中声明一个处理程序,例如:

var saveButtonHandler = ((_ handler: String?) -> Void)

在要推送控制器的FirstViewController中,您可以像这样定义处理程序

secondViewController.saveButtonHandler = { (text:String) in //append your text here to array
}

然后点击保存按钮

self.saveButtonHandler?(<Your_Text>)