如何在SwiftUI中刷新关闭图纸的视图

时间:2019-09-05 15:38:49

标签: swiftui

我想从一个视图中获取用户输入(使用TextField,并在另一视图中显示它(用户输入的文本)。

这是一个最小的,可重复的示例

我创建了一个名为ObservableObject的{​​{1}}

UserData

然后我用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 enter输入文本。
但是,当我通过向下拖动来关闭工作表时,TextField中的Text仍为空?。

据我所知,只要我在ContentView中输入内容,$userData.name就会更新。

但是在另一个具有绑定TextField的视图中的Text不会反映更新后的值?。


解雇工作表时,有什么方法可以更新self.userData.name还是有其他方法可以做到这一点?

请帮帮我。

感谢您阅读我的问题?

1 个答案:

答案 0 :(得分:2)

您的Edit视图和ContentView分别持有单独的UserData对象。它们不共享对单个对象的引用,因此编辑其中一个不会更新另一个。

首先更新您的Edit视图,以使其初始化自己的UserData对象:

@ObservedObject var userData: UserData

然后,在您的ContentView中,将引用传递给您的单个规范UserData对象进入Edit视图:

.sheet(isPresented: $isPresented) {
    Edit(userData: self.userData)
}