我目前正在开发应用程序,但在发布事件方面遇到问题。
我以多个视图(7个屏幕)的顺序收集数据,并希望一次存储最终数据(或在最终视图中显示所有数据)。 这些数据是例如位置信息,用户信息,事件图像,注释,事件类别等。 如果我在一两个视图中收集数据,我知道如何将数据存储在数据库/存储(firebase)中。 但是在我的用例中,我有七个视图,找不到任何优雅的方法。
使用Xcode 10最好的方法是什么?
答案 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)
Event
中声明一个UIViewController
对象UIViewController
使用UIViewController
更新对象并将其传递给下一个prepareForSegue
。UIViewController
将获得最新的Event
对象。