在视图之间保留 UITextField 中的文本
Keep text in UITextField between views
我有两个ViewControllers
,X和Y,都包含UITextFields
。从 X 开始,我在一个字段中输入一些文本,然后切换到 Y 并在一个字段中输入一些文本。回到 X,我输入的文字还在,而再次回到 Y 显示文字已经消失。在所有视图之间切换时如何在 TextFields
中保留文本?
这是因为当您从 X 转到 Y 时,会创建 Y 实例并(我猜)将其推送到 UINavigationController 堆栈。当您按下后退按钮时,Y 实例将被释放并再次呈现 X。 X 实例与最初创建的 X 实例相同。当您再次转到 Y 时,它会作为一个新实例从头开始重新创建。
可能的解决方案:
- 将字段值保留在 "root" 视图控制器中作为自定义对象或字典,并将其传递到 vc 中,即在
prepareForSegue
中。 root 是指显示表单第一页或仅显示第一页的控制器 vc - 取决于您的需要
- 将它们存储在用户默认值中,每个 vc
- 将它们保存在某个您可以从每个控制器访问的单例对象中
一种可能性:删除情节提要中的 segues 并实现类似这样的东西...
class FirstViewController: UIViewController {
lazy var secondVC: SecondViewController = {
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("SecondVC") as! SecondViewController
return vc
}()
@IBAction func buttonTapped(sender: UIButton) {
navigationController?.pushViewController(secondVC, animated: true)
}
}
我有两个ViewControllers
,X和Y,都包含UITextFields
。从 X 开始,我在一个字段中输入一些文本,然后切换到 Y 并在一个字段中输入一些文本。回到 X,我输入的文字还在,而再次回到 Y 显示文字已经消失。在所有视图之间切换时如何在 TextFields
中保留文本?
这是因为当您从 X 转到 Y 时,会创建 Y 实例并(我猜)将其推送到 UINavigationController 堆栈。当您按下后退按钮时,Y 实例将被释放并再次呈现 X。 X 实例与最初创建的 X 实例相同。当您再次转到 Y 时,它会作为一个新实例从头开始重新创建。
可能的解决方案:
- 将字段值保留在 "root" 视图控制器中作为自定义对象或字典,并将其传递到 vc 中,即在
prepareForSegue
中。 root 是指显示表单第一页或仅显示第一页的控制器 vc - 取决于您的需要 - 将它们存储在用户默认值中,每个 vc
- 将它们保存在某个您可以从每个控制器访问的单例对象中
一种可能性:删除情节提要中的 segues 并实现类似这样的东西...
class FirstViewController: UIViewController {
lazy var secondVC: SecondViewController = {
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("SecondVC") as! SecondViewController
return vc
}()
@IBAction func buttonTapped(sender: UIButton) {
navigationController?.pushViewController(secondVC, animated: true)
}
}