我已经使用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?按下后退按钮时将它们保存到模型中?有更好的解决方案吗?感谢。
答案 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)
}