我想TextField从一个视图中获取用户输入(使用)并在另一个视图中显示它(用户输入的文本)。
这是一个最小的、可重现的示例
我创建了一个ObservableObject名为UserData
import Foundation
import SwiftUI
import Combine
class UserData: ObservableObject {
@Published var name: String = ""
}
Run Code Online (Sandbox Code Playgroud)
然后,我创建了一个名为视图Edit与TextField在那里用户可以输入文本
import SwiftUI
struct Edit: View {
@ObservedObject var userData = UserData()
var body: some View {
VStack {
TextField("Enter Name", text: $userData.name)
}
}
}
Run Code Online (Sandbox Code Playgroud)
这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()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我们单击 中的按钮时,将显示ContentView一个带有Edit视图的工作表
当我单击该按钮时,会Edit显示一个带有视图的工作表?。
然后我可以使用TextField?输入文本。
但是当我通过向下拖动关闭工作表时,TextinContentView仍然是空的。
据我所知,$userData.name每当我在TextField.
但是Text在另一个视图中带有绑定self.userData.name不会反映更新后的值。
当我们关闭工作表时,
有什么方法可以更新,Text或者有没有其他方法可以做到这一点?
请帮我。
感谢您阅读我的问题
小智 6
您的Edit视图和ContentView每个都持有不同的UserData对象。它们不共享对单个对象的引用,因此编辑其中一个不会更新另一个。
首先更新您的Edit视图,使其不会初始化自己的UserData对象:
@ObservedObject var userData: UserData
Run Code Online (Sandbox Code Playgroud)
然后,在您的 中ContentView,将对您的单个规范对象的引用传递UserData到Edit视图中:
.sheet(isPresented: $isPresented) {
Edit(userData: self.userData)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3728 次 |
| 最近记录: |