当前,所示的代码将字符串"TEST“保存在Firestore数据库中。我需要做的是在按下按钮时保存输入到UITextField中的文本,并将数据保存在Firestore数据库中。
对于我的IBAction功能,我相信它是正确的,但我不知道如何在没有错误的情况下将它放入我的dict中。
import Foundation
import UIKit
import Firebase
import FirebaseUI
class TrainViewController: UIViewController{
@IBOutlet weak var trainField: UITextField!
@IBOutlet weak var locationField: UITextField!
@IBOutlet weak var engineField: UITextField!
@IBAction func saveButton(_ sender: UIButton) {
var train: String = trainField.text!
}
override func viewDidLoad() {
super.viewDidLoad()
trainField.delegate = self
var dict = [String:String]()
dict.updateValue("TEST", forKey: "train")
let db = Firestore.firestore()
db.collection("users").addDocument(data: dict)
}
}
extension TrainViewController : UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
发布于 2019-11-19 10:48:24
您可能希望从操作中的字段中收集字符串,然后将其传递给函数以进行保存。
class TrainViewController: UIViewController{
@IBOutlet weak var trainField: UITextField!
@IBOutlet weak var locationField: UITextField!
@IBOutlet weak var engineField: UITextField!
@IBAction func saveButton(_ sender: UIButton) {
let trainText = trainField.text!
self.saveText(theText: trainText)
}
override func viewDidLoad() {
super.viewDidLoad()
}
func saveText(theText: String) {
let db = Firestore.firestore()
let dict = ["train_text": theText]
db.collection("users").addDocument(data: dict)
}
}
将导致将下列内容写入Firestore
your_firestore
users
random_doc_id
train_text: "the passed in string"
编辑
基于一些新的信息,OP希望将三个文本字段中的文本全部写到一个文档中。
因此,更改按钮操作-它所做的只是调用我们的saveText函数,而不传递任何数据。
@IBAction func saveButton(_ sender: UIButton) {
self.saveText()
}
然后是saveText函数
func saveText() {
let trainText = self.trainField.text!
let locationText = self.locationField.text!
let engineText = self.engineField.text!
let db = Firestore.firestore()
let dict = ["train_text": trainText,
"location_text": locationText,
"engine_text": engineText]
db.collection("users").addDocument(data: dict)
}
由此产生的Firestore如下所示
your_firestore
users
random_doc_id
train_text: "text from the train field"
location_text: "text from the location field"
engine_text: "text from the engine field"
发布于 2019-11-19 07:47:21
这很容易实现,您需要做的是声明一个函数,在输入数据后保存它。
您无法保存trainField
的原因是,当ViewController
调用viewDidLoad
时,按钮没有被按下,因此您没有从trainTextField获得文本。
要解决这个问题,您可以执行以下操作:
fileprivate func saveTrainWithData(text: String) {
let dictData = ["train": text] as [String:Any]
// save data to FireStore here using `dictData`
let db = Firestore.firestore()
db.collection("users").addDocument(data: dictData)
}
现在,要关闭这个函数,只需在@IBAction
内部调用它,如下所示
@IBAction func saveButton(_ sender: UIButton) {
var train: String = trainField.text!
saveTrainWithData(text: train)
}
https://stackoverflow.com/questions/58937370
复制