将Firebase值发送到文本字段

时间:2017-06-17 04:12:24

标签: ios swift firebase-realtime-database uitextfield

我有一个包含三个文本字段的视图控制器。当用户第一次使用该应用时,他们会在这些文本字段中输入一些信息并按完成,然后将信息发送到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。

1 个答案:

答案 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)

我可以保证你这样做只需要按一下完成按钮。