swift - Swiftui如何在子视图关闭时刷新父视图消失
问题描述
我有一个名为 PostView 的父视图,它有一个 PlaceData 状态变量,它只包含一个空字符串。当您单击图像后置位时,它将转到子视图 PlacePickerView 。该视图将具有来自数据库的动态数据。当您在该子视图中点击 Text model.PlaceName时,该子视图将关闭,我们将返回父视图。我要做的是将子视图 (PlacePickerView) 中的 model.PlaceName 的值传递给父视图 (PostView) 中的 PlaceData。问题是在子视图中我正在使用 @Environment(.presentationMode) var presentationMode(因为父视图可能包含更多数据,我不想通过创建新实例而丢失它)关闭该视图并且似乎无法将数据传递回父视图。任何帮助或建议都会很棒。
struct PostView: View {
@State var PlaceState = false
@State var PlaceData = ""
var body: some View {
VStack {
Text(PlaceData)
.foregroundColor(.white)
.font(.system(size: 17))
.fontWeight(.medium)
.padding(.bottom, 20.0)
Image("postplace")
.resizable()
.frame(width: 24, height: 24)
.padding(.top, 5.0)
.onTapGesture {
self.PlaceState.toggle()
}.fullScreenCover(isPresented: $PlaceState, content: {
PlacePickerView()
})
}
}
}
子视图
struct PlacePickerView: View {
@Environment(\.presentationMode) var presentationMode
@State var model: MainModel?
@State var tappedText1 = false
var body: some View {
VStack {
Text(model.PlaceName) // I would like to pass value of model.PlaceName to PostView PlaceData on when model on tapped is clicked here
.font(.system(size: 11))
.fontWeight(.semibold)
.frame(width: 106, height: 40)
.foregroundColor(.white)
.background(RoundedRectangle(cornerRadius: 4).stroke())
.background(Color(UIColor(hexString: "#800000")))
.onTapGesture {
tappedText1.toggle()
self.presentationMode.wrappedValue.dismiss()
}
} MainViewModel().MainViewRequest(newValue) { data in
self.model = data!
}
}
}
解决方案
struct PostView: View {
@State var PlaceState = false
@State var PlaceData = ""
@State var model: MainModel?
PlacePickerView(model: $model)
struct PlacePickerView: View {
@Binding var model: MainModel?
这是您希望与绑定一起使用的一般概念——父级拥有它,并且它被传递给子视图$
(使其成为绑定)。子视图将其用作@Binding
而不是@State
.
顺便说一句,我在这里假设这MainModel
是一个结构。
当状态/绑定值更改时,您的父视图将自动重新呈现。
推荐阅读
- graphql - graphql 是否支持证书锁定?
- java - JDatechooser 显示不正确的日期
- r - x 轴上的日期标签错位一个月
- android - xml文件如何存储在android中的共享首选项中
- angular - 需要将地图数据(youtube api 播放列表)与其他数据(播放列表的视频编号)合并
- pycharm - 我无法从 PyCharm 复制并粘贴到其他应用程序
- flutter - Flutter 保存多个用户的共享偏好
- python-3.x - python解码部分十六进制字符串
- python-3.x - 使用python重新排序文本文件中的段落
- c++ - 如果它的基类不应该是抽象的,那么处理复制多态对象的虚拟方法的最佳方法是什么?