Xcode 10,Swift 4-如何在多个视图控制器之间传输数据?

时间:2019-02-04 12:23:10

标签: ios swift firebase uiviewcontroller swift4

我目前正在开发应用程序,但在发布事件方面遇到问题。

我以多个视图(7个屏幕)的顺序收集数据,并希望一次存储最终数据(或在最终视图中显示所有数据)。 这些数据是例如位置信息,用户信息,事件图像,注释,事件类别等。 如果我在一两个视图中收集数据,我知道如何将数据存储在数据库/存储(firebase)中。 但是在我的用例中,我有七个视图,找不到任何优雅的方法。

使用Xcode 10最好的方法是什么?

3 个答案:

答案 0 :(得分:0)

在视图控制器之间传递数据有几种方法。例如,您可以使用实例属性或segue或委托方法。

我建议您研究这篇文章,其中详细介绍了各种方法以及如何应用它们:

How To: Pass Data Between View Controllers In Swift

编辑:

检查问题图片后,我发现使用segue是最合适的解决方案。从图片中可以看出,您在一个View Controller中输入了数据,将其传递给第二个View Controller,最后将所有数据上传到Firebase。

我假设您使用情节提要(如果没有,请参考上面的链接以获取其他方法。)在下面的示例中,您将从一个VC传递一个字符串到另一个VC。

步骤1:

在两个视图控制器之间添加序列。情节提要->按ctrl并单击VC并拖动鼠标->您将看到一个蓝色箭头,将其拖动到VC 2并释放->选择手动segue:显示->单击segue并为其指定一个标识符

第2步:

在VC的两个中,创建一个字符串变量:

class SecondViewController: UIViewController {
var stringToPass: String = ""

    override func viewDidLoad() {
    super.viewDidLoad()

    print(stringToPass)
}

步骤3: 在VC one中,输入以下内容:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? SecondViewController {
vc.stringToPass = "This is the string we pass between two VC"
     }
}

第4步: 然后,每当您要转到SecondViewController时,请执行以下步骤:

performSegue(withIdentifier: "identifierYouEntered", sender: self)

答案 1 :(得分:0)

您可以按以下代码使用struct。在此结构中为所有屏幕设置所有必需的变量(例如字符串,图像等)。而且您可以从任何ViewController进行访问。

struct InputDetails {
    static var details: InputDetails = InputDetails()

    var city: String = ""
    var lat: String = ""
    var long: String = ""
}

现在要在其中添加价值

InputDetails.details.city = textfiels.text

现在可以在最后一个屏幕中访问第一个屏幕值

print(InputDetails.details.city)

当您的API调用或以上结构用法结束后,请确保重设以下所有详细信息。

InputDetails.details = InputDetails()

答案 2 :(得分:-1)

  1. 在每个Event中声明一个UIViewController对象
  2. 每个UIViewController使用UIViewController更新对象并将其传递给下一个prepareForSegue
  3. 最后一个UIViewController将获得最新的Event对象。