是否可以在 SwiftUI 中保存输入到警报文本字段中的文本,并像这样在应用程序中显示它 -> Text("alert text input here")?
Is it possible to save the text entered into an alert's textfield in SwiftUI and display it in the app like this -> Text("alert text input here")?
到目前为止,我能够处理在警报中显示文本字段,用户可以在其中输入一些文本,但无法使用该文本并将其显示在应用程序中。
这是警报代码:
private func alert() {
let alert = UIAlertController(title: "Enter Name", message: "...or pseudo", preferredStyle: .alert)
alert.addTextField { (textField) in
textField.placeholder = "Enter something"
}
alert.addAction(UIAlertAction(title: "Done", style: .default) { _ in })
let textField = alert.textFields![0] as UITextField
alertInput = textField.text ?? "Name"
showAlert(alert: alert)
}
func showAlert(alert: UIAlertController) {
if let controller = topMostViewController() {
controller.present(alert, animated: true)
}
}
这就是我尝试在正文中实现它的方式:
Section {
VStack {
Button(action: {
withAnimation {
self.alert()
}
}) {
Text(alertInput)
}
}
}
alertInput
在 body 之前初始化,如下所示:
@State private var alertInput = ""
您需要从“完成”按钮的处理程序中获取文本字段的值。所以你需要做的就是将括号向下移动:
alert.addAction(UIAlertAction(title: "Done", style: .default) { _ in
let textField = alert.textFields![0] as UITextField
alertInput = textField.text ?? "Name"
})
当用户点击您设置的 UIAlertAction 时,将调用此闭包中的代码。
请注意,如果该字段留空,textField.text
的值将是 ""
而不是 nil
,因此为了使用您提供的默认值,您可以这里还需要一些额外的逻辑来检查空字符串。
到目前为止,我能够处理在警报中显示文本字段,用户可以在其中输入一些文本,但无法使用该文本并将其显示在应用程序中。
这是警报代码:
private func alert() {
let alert = UIAlertController(title: "Enter Name", message: "...or pseudo", preferredStyle: .alert)
alert.addTextField { (textField) in
textField.placeholder = "Enter something"
}
alert.addAction(UIAlertAction(title: "Done", style: .default) { _ in })
let textField = alert.textFields![0] as UITextField
alertInput = textField.text ?? "Name"
showAlert(alert: alert)
}
func showAlert(alert: UIAlertController) {
if let controller = topMostViewController() {
controller.present(alert, animated: true)
}
}
这就是我尝试在正文中实现它的方式:
Section {
VStack {
Button(action: {
withAnimation {
self.alert()
}
}) {
Text(alertInput)
}
}
}
alertInput
在 body 之前初始化,如下所示:
@State private var alertInput = ""
您需要从“完成”按钮的处理程序中获取文本字段的值。所以你需要做的就是将括号向下移动:
alert.addAction(UIAlertAction(title: "Done", style: .default) { _ in
let textField = alert.textFields![0] as UITextField
alertInput = textField.text ?? "Name"
})
当用户点击您设置的 UIAlertAction 时,将调用此闭包中的代码。
请注意,如果该字段留空,textField.text
的值将是 ""
而不是 nil
,因此为了使用您提供的默认值,您可以这里还需要一些额外的逻辑来检查空字符串。