是否可以在 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,因此为了使用您提供的默认值,您可以这里还需要一些额外的逻辑来检查空字符串。