作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从一个 View 获取用户输入(使用 TextField
)并在另一个 View 中显示它(用户输入的文本)。
这是一个最小的,可重现的例子
我创建了一个 ObservableObject
命名为 UserData
import Foundation
import SwiftUI
import Combine
class UserData: ObservableObject {
@Published var name: String = ""
}
Edit
的 View 与
TextField
用户可以在其中输入文本
import SwiftUI
struct Edit: View {
@ObservedObject var userData = UserData()
var body: some View {
VStack {
TextField("Enter Name", text: $userData.name)
}
}
}
ContentView
,我想在其中显示用户输入的文本的 Root View (最初,文本为空)。
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
的工作 TableView 出现✅。
TextField
输入文本✅。
Text
在
ContentView
还是空的🙁。
$userData.name
每当我在
TextField
中输入内容时都会更新.
Text
在另一个具有绑定(bind)
self.userData.name
的 View 中不会反射(reflect)更新的值😫。
Text
当我们关闭工作表或有其他方法可以做到这一点?
最佳答案
您的 Edit
查看和ContentView
每个人都持有单独的UserData
对象。它们不共享对单个对象的引用,因此编辑其中一个不会更新另一个。
首先更新您的Edit
查看所以它不会初始化自己的UserData
目的:
@ObservedObject var userData: UserData
ContentView
,传递对您的单一规范
UserData
的引用对象进入
Edit
看法:
.sheet(isPresented: $isPresented) {
Edit(userData: self.userData)
}
关于swiftui - 如何在 SwiftUI 中关闭工作表时刷新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57808873/
我是一名优秀的程序员,十分优秀!