我有两个视图控制器,第一个视图控制器包含用户输入的(电子邮件/用户名)文本字段。第二个视图控制器包含用户输入的(密码)文本字段。第二个视图控制器还包含一个Button,用于执行FireBase Auth代码以创建新用户。我想从第一个视图控制器类中获取电子邮件文本,并将该数据传输到第二个视图控制器类,以便成功创建新用户。我尝试使用全局变量,但它似乎没有用,任何帮助这个困境?感谢任何帮助!
https://databricks.com/blog/2015/03/20/using-mongodb-with-spark.html
答案 0 :(得分:0)
如果你正确地做到这一点,全局变量虽然不是最好的解决方法,但是可以正常工作:
1声明一个全局变量,它应该在两个类之外(不要使用结构):
var emailOrUsername: String = ""
2实现textFieldDidEndEditing
方法(假设您已将文本字段委托设置为self),并将文本字段中的字符串分配给emailOrUsername
:
func textFieldDidEndEditing(_ textField: UITextField) {
emailOrUsername = emailTextField.text
}
3导航到下一个视图控制器后,只需引用该变量。简单。
编辑:虽然这种方法看似简单,但当你的应用逐渐变得越来越复杂时,维护起来会非常困难。所以,我建议你查看我对this question的答案(概念是相同的:协议)。
您可以使用的另一种方法是在第二个viewcontroller中定义emailOrUsername
变量,然后在prepareForSegue中定义:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let secondViewController = segue.destination as? SecondViewController {
secondViewController.emailOrUsername = emailTextField.text!
}
}
答案 1 :(得分:0)
在这种情况下,我不建议使用全局结构,但是如果你想这样做的话。您可以创建一个新的swift文件并将结构移动到该文件。像这样:
globalData.email
您可以使用override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "nameOfYourSegue" {
let controller = segue.destination as! NameOfViewControllerYourGoingTo
controller.email = email
}
但是,我认为你在segue时传递数据更有意义。如果你不知道如何看待this question。然后你可以做这样的事情:
{{1}}