我希望在一个视图中获取用户输入(使用 TextField
),并在另一个视图中展示用户输入的文本内容。
以下是一个最小可复现的示例:
我创建了一个名为UserData
的ObservableObject
。
import Foundation
import SwiftUI
import Combine
class UserData: ObservableObject {
@Published var name: String = ""
}
然后我创建了一个名为Edit
的视图,其中包含一个TextField
,用户可以在其中输入文本。
import SwiftUI
struct Edit: View {
@ObservedObject var userData = UserData()
var body: some View {
VStack {
TextField("Enter Name", text: $userData.name)
}
}
}
这里是ContentView
,也就是根视图,我希望在这里展示用户输入的文本(初始时,文本为空)。
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()
}
}
}
}
当我们在ContentView
中点击按钮时,将呈现一个带有Edit
视图的表单
当我点击该按钮时,将出现一个带有Edit
视图的表单 ✅。
然后我可以使用TextField
输入文本 ✅。
但是,当我通过向下拖动来关闭表单时,ContentView
中的Text
仍然为空。
据我所知,每当我在TextField
中输入内容时,$userData.name
都会更新。
但是另一个具有绑定值self.userData.name
的视图中的Text
不会反映更新后的值。
是否有办法在关闭表单时更新Text
,或者还有其他方法可以做到这一点?
请帮帮我。
谢谢阅读我的问题
@State
,而不是@ObservableObject
。但是 (2) 为什么你没有使用@EnvironmentObject
?我有可用的代码。最后,(3) 我现在对于你在这里的name
变量的未接受答案已经有了6个赞:https://dev59.com/XbXna4cB1Zd3GeqPP7xP#57513103 有可能这会对你有所帮助吗? - user7014451