Как сохранить текст оповещения в Firebase? - PullRequest
0 голосов
/ 02 января 2019

У меня есть лист действий, и я открываю им предупреждение со следующими кодовыми линиями:

 func showActionSheet(postId: String) {
    let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
    let action = UIAlertAction(title: NSLocalizedString("Beitrag melden", comment: ""), style: .default, handler: { _ in
        self.alertBeitrageMelden(postId: postId)

    })
    actionSheet.addAction(action)
    actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
    self.present(actionSheet, animated: true, completion: nil)
}

Теперь я хочу сохранить ввод текстового поля внутри предупреждения в Firebase:

func alertBeitrageMelden(postId: String){
    // Create the action buttons for the alert.
    let defaultAction = UIAlertAction(title: "Melden", style: .default) { (action) in

        let ref = Database.database().reference().child("gemeldeteBeitraege").child(postId)
        ref.setValue(["postId": postId, "reason": self.textFieldAlert])
    }
    let cancelAction = UIAlertAction(title: "Abbrechen", style: .cancel) { (action) in
                                        // Respond to user selection of the action.
    }

    let alert = UIAlertController(title: "Beitrag melden", message: "Wieso möchtest du den Beitrag melden?", preferredStyle: .alert)

    alert.addTextField { (textField) in
        textField.placeholder = ""
        if textField.text?.count ?? 0 > 0 {
            self.textFieldAlert = textField.text!
        }
    }

    alert.addAction(cancelAction)
    alert.addAction(defaultAction)


    self.present(alert, animated: true) {
    }
}

Я не получаю никаких данных о textField.

Заранее благодарен за помощь!

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Вы можете получить textField от вашего alertController, используя alert.textFields?.first.

Пример:

func alertBeitrageMelden(postId: String){
        // Create the action buttons for the alert.

        let alert = UIAlertController(title: "Beitrag melden", message: "Wieso möchtest du den Beitrag melden?", preferredStyle: .alert)

        alert.addTextField { (textField) in
            textField.placeholder = ""
        }

        let defaultAction = UIAlertAction(title: "Melden", style: .default) { (action) in

            if let textFieldAlert = alert.textFields?.first?.text, textFieldAlert.count > 0 {

                let ref = Database.database().reference().child("gemeldeteBeitraege").child(postId)
                ref.setValue(["postId": postId, "reason": textFieldAlert])
            }
        }
        let cancelAction = UIAlertAction(title: "Abbrechen", style: .cancel) { (action) in
            // Respond to user selection of the action.
        }

        alert.addAction(cancelAction)
        alert.addAction(defaultAction)


        self.present(alert, animated: true) {
        }
    }
0 голосов
/ 02 января 2019
alert.addTextField { textField in
}

Это обработчик конфигурации оповещения , где вы можете изменить свойства текстового поля, которое будет добавлено.Но установка какой-либо текстовой переменной здесь не имеет никакого смысла, потому что text текстового поля в данный момент пусто.

Ваша цель - получить text текстового поля в тот момент, когда вам это нужно, вв этом случае в UIAlertAction handler


Создайте оповещение до , объявите его действия и добавьте текстовое поле

let alert = UIAlertController(title: "Beitrag melden", message: "Wieso möchtest du den Beitrag melden?", preferredStyle: .alert)

alert.addTextField { textField in
    textField.placeholder = ""
}

, затем по умолчаниюпроверка действия, если текст этого текстового поля не пуст и если не сохранить этот текст в Firebase

let defaultAction = UIAlertAction(title: "Melden", style: .default) { _ in
    if let text = alert.textFields?.first?.text, !text.isEmpty {
        let ref = Database.database().reference().child("gemeldeteBeitraege").child(postId)
        ref.setValue(["postId": postId, "reason": text])
    }
}
0 голосов
/ 02 января 2019

Вам нужно

if let te = alert.textFields?.first?.text , te.count > 0 { 
    let ref = Database.database().reference().child("gemeldeteBeitraege").child(postId)
     ref.setValue(["postId": postId, "reason":te])
}

Так как self.textFieldAlert = textField.text! сохранит пустое начальное значение и переместит эту строку

 let alert = UIAlertController(title: "Beitrag melden", message: "Wieso möchtest du den Beitrag melden?", preferredStyle: .alert)

в начало функции, чтобы вы могли получить к ней доступ внутридействие оповещения


func alertBeitrageMelden(postId: String) { 
    let alert = UIAlertController(title: "Beitrag melden", message: "Wieso möchtest du den Beitrag melden?", preferredStyle: .alert)

    alert.addAction(UIAlertAction(title: "Melden", style: .default) { (action) in

        if let te = alert.textFields?.first?.text , te.count > 0 {

            let ref = Database.database().reference().child("gemeldeteBeitraege").child(postId)
            ref.setValue(["postId": postId, "reason":te])
        }

    }) 
    alert.addAction(UIAlertAction(title: "Abbrechen", style: .cancel) { (action) in
        // Respond to user selection of the action.
    })

    alert.addTextField { (textField) in
        textField.placeholder = ""
    }
    self.present(alert, animated: true)
}

Вы также можете сделать это, сохранив ссылку на текстовое поле оповещения

var alertTexf:UITextField! 
func alertBeitrageMelden(postId: String){

    let alert = UIAlertController(title: "Beitrag melden", message: "Wieso möchtest du den Beitrag melden?", preferredStyle: .alert) 
    alert.addAction(UIAlertAction(title: "Melden", style: .default) { (action) in

        if let te = self.alertTexf.text , te.count > 0 { 
            let ref = Database.database().reference().child("gemeldeteBeitraege").child(postId)
            ref.setValue(["postId": postId, "reason":te])
        } 
    }) 
    alert.addAction(UIAlertAction(title: "Abbrechen", style: .cancel) { (action) in
        // Respond to user selection of the action.
    }) 
    alert.addTextField { (textField) in
        textField.placeholder = ""
        self.alertTexf = textField
    }
    self.present(alert, animated: true)
}
...