Je veux obtenir l'entrée de l'utilisateur (en utilisant TextField
) d'une vue et l'afficher (le texte que l'utilisateur a saisi) dans une autre vue.
Voici un exemple minimal et reproductible
J'ai créé un ObservableObject
nommé UserData
import Foundation
import SwiftUI
import Combine
class UserData: ObservableObject {
@Published var name: String = ""
}
Puis j'ai créé une vue nommée Edit
avec un TextField
où l'utilisateur peut saisir un texte
import SwiftUI
struct Edit: View {
@ObservedObject var userData = UserData()
var body: some View {
VStack {
TextField("Enter Name", text: $userData.name)
}
}
}
Et voici le ContentView
Dans la vue Root, je veux afficher le texte que l'utilisateur a saisi (initialement, le texte est vide).
import SwiftUI
struct ContentView: View {
@State var isPresented = false
@ObservedObject var userData = UserData()
var body: some View {
VStack {
Text(self.userData.name)
.font(.largeTitle)
Button(action: { self.isPresented.toggle() }) {
Text("Click me to Edit")
}
.sheet(isPresented: $isPresented) {
Edit()
}
}
}
}
Lorsque nous cliquons sur le bouton dans le ContentView
une feuille est présentée avec Edit
voir
Lorsque je clique sur ce bouton, une feuille avec Edit
La vue apparaît.
Ensuite, je peux entrer un texte en utilisant la fonction TextField
.
Mais lorsque j'écarte la feuille en la faisant glisser vers le bas, la Text
dans le ContentView
est toujours vide .
Comme je le sais, $userData.name
mises à jour lorsque je saisis quelque chose dans le TextField
.
Mais un Text
dans une autre vue avec une liaison self.userData.name
ne va pas refléter la valeur mise à jour .
Existe-t-il un moyen de mettre à jour le Text
lorsque nous rejetons la feuille ou y a-t-il un autre moyen de le faire ?
Aidez-moi, s'il vous plaît.
Merci de lire ma question