我想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
?输入文本。
但是当我通过向下拖动关闭工作表时,Text
inContentView
仍然是空的。
据我所知,$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 次 |
最近记录: |