鉴于我正在使用instantiateViewController函数,在视图之间传递数据

时间:2016-12-10 22:18:03

标签: ios swift xcode segue instantiation

基本上我有五个视图控制器,第一个是初始控制器有两个文本字段,用户可以在其中输入值。然后,基于来自两个选择器视图的用户选择,一旦命中下一个按钮,他/她将使用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

    }

}

}

请告知我需要做些什么来纠正它?

2 个答案:

答案 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),或创建单例类并在其属性中设置数据。