如何在 Firebase 中存储警报文本?

How to store text of alert in Firebase?

我有一项行动 sheet 并且我使用以下 codelins 向他们发出警报:

 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) {
    }
}

我没有得到文本字段的任何数据。

在此先感谢您的帮助!

你需要

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)
}

您可以使用 alert.textFields?.first 从您的 alertController 获取您的 textField

示例:

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) {
        }
    }
alert.addTextField { textField in
}

这是警报的配置处理程序,您可以在其中更改将要添加的文本字段的属性。但是在这里设置一些文本变量没有任何意义,因为此刻文本字段的 text 是空的。

您的目标应该是在需要时立即获得 text 文本字段,在本例中是 UIAlertActionhandler


因此,在您声明其操作并添加文本字段

之前创建警报
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])
    }
}