我目前正在开发一个应用程序,在发布事件时遇到了问题。
我在几个视图(7个屏幕)的序列中收集数据,并希望立即存储最终数据(或在最终视图中显示所有数据)。这些数据是,例如,位置信息,用户信息,事件图像,评论,事件类别,...如果我在一个或两个视图中收集数据,我知道如何将数据存储在数据库/存储(firebase)中。但在我的用例中,我有七个视图,我找不到任何优雅的方法。
使用Xcode10做这件事的最好方法是什么?
发布于 2019-02-08 20:09:43
你可以像下面的代码一样使用。为这个结构中的所有屏幕设置所有必需的变量(如字符串、图像等)。你可以从任何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调用或以上的struct使用结束,请确保重置所有细节,如下所示。
InputDetails.details = InputDetails()
发布于 2019-02-04 20:29:30
有几种方法可以在视图控制器之间传递数据。例如,您可以使用实例属性或段或委托方法。
我建议您学习这篇文章,它完整地描述了不同的方法以及如何应用它们:
How To: Pass Data Between View Controllers In Swift
编辑:
在检查了您问题中的图片后,我认为使用segue将是这里最合适的解决方案。从图片上看,您可以在一个View Controller中输入数据,然后将其传递到第二个View Controller中,最后将所有数据上传到Firebase。
我假设您使用故事板(如果没有,请参考上面的链接了解其他方法)。在下面的示例中,您将把一个字符串从一个VC传递到另一个VC。
步骤1:
在两个视图控制器之间添加分段。Storyboard ->按Ctrl键并单击VC one并拖动鼠标,您将看到一个蓝色箭头,将其拖动到VC two并松开,然后选择-> manual segue: show ->单击segue并为其指定标识符
第2步:
在VC 2中,创建一个字符串变量:
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)
https://stackoverflow.com/questions/54516032
复制相似问题