如何在视图控制器之间移动时保存textField.text数据并保留它们?

时间:2018-01-16 12:17:02

标签: swift uitextfield persistence

我已经使用3个不同的视图控制器构建了一个多步骤注册。

VC1: Email, pass, confirm pass text fields then press next to VC2
VC2: First, middle, last name then press next to VC 3
VC3: Address, city, state, zipcode -> Complete sign up.

我想知道在这些View控制器之间移动时如何保留textField.text数据。

所以,当我填充VC2但是回到VC1,然后回到VC2,我的VC2字段被重置并且是空白的,我如何保存这些字段,这样当我回到VC2时,它们被保存并填充?

UserDefaults?按下后退按钮时将它们保存到模型中?有更好的解决方案吗?感谢。

1 个答案:

答案 0 :(得分:0)

因此,如果您使用segues在self.performSegue(withIdentifier: "ID_HERE", sender: self)之类的屏幕之间导航。我建议将数据从VC1传递到VC2到VC3,如果你回去,你将插入的数据传递给前一个ViewController。

要从VC1传递到VC2,您可以使用prepareForSegue函数:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ID_HERE"{
        let destVC = segue.destination as! NextViewController
        destVC.variable = self.variable
    }
}

要将数据从VC2传回VC1,请执行以下操作:

创建协议:

protocol VC2Delegate {
func passData(passedString: String)
}

将协议添加到VC1

Class VC1: : UIViewController, VC2Delegate{}

并实现协议中的功能:

func passData(passedString: String){ 
   //Write the String in your TextField or whatever
}

并将以下行添加到prepareForSegue函数

destVC.VC2Delegate = self

你需要VC2中的VC2Delegate变量:

var VC2Delegate : VC2Delegate?

并在VC2内部用户点击保存按钮后调用passData函数,例如在viewWillDisappear

override func viewWillDisappear(_ animated: Bool) {
    VC2Delegate?.passData(passedString: String)
}