我有两个 View Controller ,我想将第二个 View Controller 文本字段值发送到第一个 View Controller 数组,并在点击按钮时关闭第二个 View Controller 。
这是我的代码:
在第一个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 中 请帮助我
最佳答案
使用委托(delegate)。
protocol CreatePopUpDelegate: class {
func createPopUpDidSaveTextFieldPick(_ value: String)
}
然后在第一个 View Controller 中:
extension FirstViewController: CreatePopUpDelegate {
func createPopUpDidSaveTextFieldPick(_ value: String) {
print ("first view controller now has value of textfield")
// add it to array or whatever
}
然后在第二个 View Controller 中:
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
。
祝你好运! 它更清晰、更好的代码。
关于arrays - 如何将第二个 viewcontroller 文本字段值传递给第一个 viewcontroller 数组并在 swift4 中点击按钮时关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56037163/