【发布时间】:2021-03-14 21:19:05
【问题描述】:
我有一个名为 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!
}
}
}
【问题讨论】:
-
很难弄清楚代码中发生了什么。您使用名为
placeEnum的参数调用PlacePickerView(placeEnum: placeEnum),但PlacePickerView没有名为该参数的属性。一般而言,我认为您想研究@Binding的作用——这是在子视图和父视图之间提供双向通信的一种方式。 -
我刚刚删除了它,我的视图也做了其他事情,但想在这个例子中简化它。我将研究绑定,看看它是否能解决问题。
-
绑定的documentation 显示了一个非常简单的示例。