swift firebase如何在不删除前一个单词的情况下向列表中添加新词
目前,该应用程序有一个文本字段,当您按键盘上的回车键时,它会在屏幕上显示实时数据,但会删除前面的问题。我的问题是,如何才能不删除上一个问题,而只将这个新问题添加到列表中。。非常感谢你swift firebase如何在不删除前一个单词的情况下向列表中添加新词,swift,firebase,Swift,Firebase,目前,该应用程序有一个文本字段,当您按键盘上的回车键时,它会在屏幕上显示实时数据,但会删除前面的问题。我的问题是,如何才能不删除上一个问题,而只将这个新问题添加到列表中。。非常感谢你 import UIKit import FirebaseFirestore class ViewController: UIViewController, UITextFieldDelegate { let database = Firestore.firestore() pr
import UIKit
import FirebaseFirestore
class ViewController: UIViewController, UITextFieldDelegate {
let database = Firestore.firestore()
private let label: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.numberOfLines = 0
return label
}()
private let field: UITextField = {
let field = UITextField()
field.placeholder = "enter text.."
field.layer.borderWidth = 1
field.layer.borderColor = UIColor.black.cgColor
return field
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(label)
view.addSubview(field)
field.delegate = self
let docRef = database.document("ios/ex")
docRef.addSnapshotListener {[weak self] snapshot, error in
guard let data = snapshot?.data(), error == nil else {
return
}
guard let text = data["text"] as? String else {
return
}
DispatchQueue.main.async {
self?.label.text = text
}
}
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
field.frame = CGRect(x: 1, y: view.safeAreaInsets.top+10, width: view.frame.size.width-20, height: 50)
label.frame = CGRect(x: 1, y: view.safeAreaInsets.top+10+60, width: view.frame.size.width-20, height: 100)
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if let text = textField.text, !text.isEmpty {
savedData(text: text)
}
return true
}
func savedData(text: String){
let docRef = database.document("ios/ex")
docRef.setData(["text": text])
}
}
在我看来,您试图做的是在文本字段中返回一些字符串,当Firestore侦听器看到数据中的更改时,这些字符串将显示在UILabel上。但问题是,您以前的数据没有出现。这是因为该功能:
func savedData(text: String){
let docRef = database.document("ios/ex")
docRef.setData(["text": text])
}
“docRef.setData()”的作用是用您正在设置的新数据替换现有数据。这就是您丢失以前数据的原因
如果要将文本附加到标签上显示的上一个问题,可能需要保存该标签字符串并附加文本,然后更新数据:
func savedData(text: String){
let previousString = self.label.text!
let newString = previousString + text
let docRef = database.document("ios/ex")
docRef.updateData(["text": newString])
}
什么名单?看起来你没有任何东西可以保存列表。标签用于单个文本字段。与文本字段相同。您可能需要某种类型的列表组件,例如用于显示多行文本的UITableView或UITextView。您还可以创建一个包含UILabel的可重用组件,并在遇到新问题时将其添加到视图中。