【问题标题】:sending Firebase value to text fields将 Firebase 值发送到文本字段
【发布时间】:2017-06-17 19:08:38
【问题描述】:

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

【问题讨论】:

  • 是的,所以当新用户第一次在三个文本字段中输入信息时,它会进入 Firebase。如果用户决定只编辑一个或两个文本字段,那么只有那些文本字段应该在 firebase 中更改,未编辑的字段应该在 firebase @AaronZheng​​span> 中保持不变
  • @AaronZheng 非常感谢
  • 如果城市字段为空(未编辑),我不希望它用空值替换 firebase 中已经存在的值
  • @AaronZheng 是的
  • @AaronZheng 过去的 cmets 是什么?是的,它有效。当我编辑文本字段并单击完成时,未编辑的文本字段将使用 firebase 中的值进行更新,然后我必须再次单击完成以使已编辑的文本字段在 firebase 中得到更新。我至少想点击一次将编辑后的文本字段发送到 firebase

标签: ios swift firebase-realtime-database uitextfield


【解决方案1】:

只需在 viewdidload 中创建这个函数。这将在 firebase 中加载您当前的属性。您应该采用 UITextFieldDelegate 并添加函数 textDidBegin ,然后您可以将 textField (发送者为!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)

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

【讨论】:

  • 如果您有任何疑问或对任何部分感到困惑,请告诉我。
  • 效果比我想要的还要好!!谢谢!!这么多!!
  • 嘿亚伦,你真的帮了我很多忙!几个星期以来我一直在处理一些代码问题,我想知道您是否可以检查一下 stackoverflow.com/questions/44658759/… 非常感谢,我们将不胜感激
猜你喜欢
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2021-02-25
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多