Обновление контроллера представления после закрытия всплывающего окна - PullRequest
0 голосов
/ 29 июня 2019

У меня есть ProfileViewController, который содержит файл .xib в качестве представления. В этом представлении данные о текущих пользователях загружаются из базы данных firebase в текстовые поля. Когда я нажимаю кнопку «обновить профиль» в ProfileViewController, вызывается PopUpViewController, и над ProfileViewController появляется всплывающее окно с текстовыми полями, которые пользователь может обновить (например, возраст, вес), а также с кнопкой закрытия и обновления. , Моя проблема в том, что когда я нажимаю кнопку «обновить» во всплывающем окне, я хочу, чтобы информация профиля пользователя автоматически обновлялась в представлении .xib и закрывалась. Мне было интересно, если кто-нибудь может мне помочь с этим? Некоторое время это давало мне покоя.

Я попытался поместить self.removeAnimate () в действие для кнопки обновления. Однако, это только обновляет текстовые поля, если я иду к предыдущему контроллеру представления и затем возвращаюсь в профиль пользователей. Если я пропущу функцию «self.removeAnimate ()» с помощью кнопки обновления и поместлю ее только на кнопку закрытия, она будет отображать обновленную информацию сразу после того, как я нажму кнопку обновления, а затем закрою кнопку.

var ref: DatabaseReference?

//function for updating the current users information in the database.
func updateUser(){
        guard let uid = Auth.auth().currentUser?.uid else { return }
        let userReference = Database.database().reference()

       let values = ["age" : userAgeTextField.text! as String,
                    "weight": userWeightTextField.text! as String]

        userReference.child("users").child(uid).updateChildValues(values)    
    }


///popup cancel button
@IBAction func cancelButton(_ sender: Any) {
        self.removeAnimate()
    }

///this is where the updateUser function is called once the user presses the update button, here is where I want to close the popup as well when the update button is clicked.
 @IBAction func updateButton(_ sender: Any) {
        updateUser()
     //self.removeAnimate() 
}


//function for removing the popup
func removeAnimate(){
        UIView.animate(withDuration: 0.25, animations: {
            self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
            self.view.alpha = 0.0;

        }, completion:{(finished: Bool) in
            if(finished){
                self.view.removeFromSuperview()
            }
        });
    }


1 Ответ

0 голосов
/ 29 июня 2019

Вы можете добавить блок завершения, как Документы Firebase предлагает получать уведомления о завершении обновления, например, используя Swift 5 Результат:

func updateUser(completion: @escaping (Result<Void, Error>) -> Void) {
    guard let uid = Auth.auth().currentUser?.uid else { return }
    let userReference = Database.database().reference()

    let values = ["age" : userAgeTextField.text! as String,
                "weight": userWeightTextField.text! as String]

    userReference.child("users").child(uid).updateChildValues(values) {
       (error: Error?, ref: DatabaseReference) in 
       if let error = error { 
           print("Data could not be saved: \(error).")
           completion(.failure(error))
       } else { 
           print("Data saved successfully!")
           completion(.success())
       }
     }     
}

Тогда:

 @IBAction func updateButton(_ sender: Any) {
     updateUser { [weak self] result in
         switch result {
         case .success:
              self?.removeAnimate()
         case .failure(let error):
            // handle error 
         }
     }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...