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

How to pass second viewcontroller textfield value to first viewcontroller array and dismiss when button tapped in swift4

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

这是我的代码:

在第一个 VC 中:

我已经创建了数组:

var iteamsArr = [String]()

第二VC:

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 请帮助我

使用委托。

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

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

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

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

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

secondViewController.saveButtonHandler = { (text:String) in //将您的文本附加到数组<br> }

然后点击保存按钮

self.saveButtonHandler?(<Your_Text>)