基本上我有五个视图控制器,第一个是初始控制器有两个文本字段,用户可以在其中输入值。然后,基于来自两个选择器视图的用户选择,一旦命中下一个按钮,他/她将使用instantiateViewController功能被引导到第二,第三,第四或第五视图控制器。因此,这里根本没有使用过段。
我想做的是:
(1)根据用户对选择器视图的选择,将用户在第一个视图控制器的文本字段中输入的数据传输到第二个,第三个,第四个或第五个视图控制器?
(2)当用户再次从第二,第三,第四或第五视图返回到第一个视图时。我想要保留他/她在文本字段中输入的数据吗?
我尝试使用prepareforsegue并在视图控制器之间引入segue,而不是将它们链接到按钮。但事情并没有对我有用。
非常感谢上述任何帮助!
谢谢, 沙堤。
这是第一个不起作用的ViewController的代码:
导入UIKit
类ViewController:UIViewController {
@IBOutlet var TextField: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func NextVC(_ sender: Any) {
let storyboard : UIStoryboard = UIStoryboard (name: "Main", bundle: nil)
let nextViewController = storyboard.instantiateViewController(withIdentifier: "secondVC") as UIViewController
self.present(nextViewController, animated: true, completion: nil)
performSegue(withIdentifier: "fromFirstToSecondVCSegue", sender: self)
func prepareForSegue (segue: UIStoryboardSegue, sender: Any?) {
var DestViewController : SecondViewController = segue.destination as! SecondViewController
}
}
}
请告知我需要做些什么来纠正它?
答案 0 :(得分:1)
1)在你的其他(第二,第三,第四或第五)视图控制器中有一个你要保存的属性,例如字符串
class FirstViewController: UIViewController {
var string: String?
}
然后,当您在第一个视图控制器中实例化其他视图控制器时,您可以传递这样的数据:
otherViewController.string = "Some string"
self.present(otherViewController, animated: true, completion: nil)
2)如果您使用现有方法呈现其他视图控制器,我99%确定将保存文本字段中的文本。如果不是,当您呈现其他视图控制器时,将该数据保存在UserDefaults中并将其写入viewWillApear。
编辑:
let nextViewController = storyboard.instantiateViewController(withIdentifier: "secondVC") as! SecondViewController
nextViewController.yourPropertyInVC = dataYouWantToPass
self.present(nextViewController, animated: true, completion: nil)
请注意,如果您没有覆盖为segue方法做准备,则无需调用它。
答案 1 :(得分:0)
有几种方法可以将数据从一个视图控制器传输到另一个视图控制器,但有一些因素会影响使用哪一个。
对于登录/密码信息等敏感数据,请使用KeyChain。否则,您可以使用UserDefaults(SwiftyUserDefaults使这非常简单https://github.com/radex/SwiftyUserDefaults),或创建单例类并在其属性中设置数据。