我有一个包含三个文本字段的视图控制器。当用户第一次使用该应用时,他们会在这些文本字段中输入一些信息并按完成,然后将信息发送到Firebase数据库:
FIRDatabase.database().reference().child("info").child(self.loggedInUser!.uid).setValue(saveObject)
但是,用户还可以编辑这三个文本字段。截至目前,当用户编辑一个文本字段并单击完成时。未经编辑的文本字段的信息显示在他们自己的文本字段中,然后用户必须再次单击完成按钮才能将已编辑的文本字段发送到Firebase:
if City.text==""
{
FIRDatabase.database().reference().child("info").child(self.loggedInUser!.uid).observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in
if let postsDictionary = snapshot .value as? [String: AnyObject] {
let city = postsDictionary["City"] as? String ?? ""
self.City.text = city
}})
}
if Major.text==""
{
FIRDatabase.database().reference().child("info").child(self.loggedInUser!.uid).observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in
if let postsDictionary = snapshot .value as? [String: AnyObject] {
let major = postsDictionary["Major"] as? String ?? ""
self.Major.text = major
}})
}
if College.text==""
{
FIRDatabase.database().reference().child("info").child(self.loggedInUser!.uid).observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in
if let postsDictionary = snapshot .value as? [String: AnyObject] {
let college = postsDictionary["College"] as? String ?? ""
self.College.text = college
}})
}
if College.text=="" || Major.text=="" || City.text==""
{
FIRDatabase.database().reference().child("info").child(self.loggedInUser!.uid).observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in
})
}else{
if let City = City.text{
if let Major = Major.text{
if let College = College.text{
let saveObject: Dictionary<String, Any> = [
"uid": uid,
"City" : City,
"Major" : Major,
"College" : College
]
FIRDatabase.database().reference().child("info").child(self.loggedInUser!.uid).setValue(saveObject)
我认为这不是用户友好的,我希望用户编辑他们想要的任何文本字段,我不希望未编辑的文本字段值出现在他们的文本字段中,我希望用户单击完成按钮一次,以便将新编辑的文本字段值发送到firebase。
答案 0 :(得分:1)
只需在viewdidload中创建此func即可。这将在firebase中加载您当前的属性。您应该采用UITextFieldDelegate并添加函数textDidBegin,然后您可以将textField(sender为!textField类)设置为空白而不是具有这些加载的属性。
func reloadFirDatabase()
{ FIRDatabase.database().reference().child("info").child(self.loggedInUser!.uid).observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in
if let postsDictionary = snapshot .value as? [String: AnyObject] {
let city = postsDictionary["City"] as? String ?? ""
let major = postsDictionary["Major"] as? String ?? ""
let college = postsDictionary["College"] as? String ?? ""
if City.text.isEmpty {
self.City.text = city
{
if Major.text.isEmpty {
self.Major.text = major
}
if College.text.isEmpty {
self.College.text = college
}
}})
}
当您按完后,您仍应将其加载到:
if let City = City.text{
if let Major = Major.text{
if let College = College.text{
let saveObject: Dictionary<String, Any> = [
"uid": uid,
"City" : City,
"Major" : Major,
"College" : College
]
FIRDatabase.database().reference().child("info").child(self.loggedInUser!.uid).setValue(saveObject)
我可以保证你这样做只需要按一下完成按钮。