Swift 如何在Firebase中存储警报文本?
我有一个行动表,我用以下代码向他们发出警报:Swift 如何在Firebase中存储警报文本?,swift,firebase,firebase-realtime-database,uitextfield,alert,Swift,Firebase,Firebase Realtime Database,Uitextfield,Alert,我有一个行动表,我用以下代码向他们发出警报: func showActionSheet(postId: String) { let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) let action = UIAlertAction(title: NSLocalizedString("Beitrag melden", comment: ""), sty
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)
功能的顶部,因此您可以在警报操作中访问它
您还可以通过保留对警报文本字段的引用来完成此操作
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) {
}
}
这是警报的配置处理程序,您可以在其中更改要添加的文本字段的属性。但是在这里设置一些文本变量没有任何意义,因为此时文本字段的text
为空
您的目标应该是在需要时立即获取文本字段的text
,在本例中是在UIAlertAction
的处理程序中
因此,在声明其操作和添加文本字段之前创建警报
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])
}
}
谢谢,这很有效!最后一个问题:如何仅在用户输入了一些文本时启用默认操作?将委托设置到reference textfield并使用它,关键是self.alertController.actions[0]。isEnabled=true/false
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) { _ 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])
}
}