实现思路
- 定义数据模型:用于在子视图和Popover之间传递数据。
- 在子视图中:创建一个状态变量来控制Popover的显示与隐藏,同时准备好要传递给Popover的数据。
- Popover视图:接收来自子视图的数据,处理后准备返回的数据。
- 使用
@Binding
:在Popover中通过@Binding
绑定子视图的状态变量,以便关闭Popover时能通知子视图并传递处理后的数据。
关键代码片段
// 定义数据模型
struct PopoverData {
var input: String
var output: String
}
struct ContentView: View {
@State private var isPopoverPresented = false
@State private var popoverData = PopoverData(input: "", output: "")
var body: some View {
VStack {
Button("Show Popover") {
popoverData.input = "Initial Data"
isPopoverPresented = true
}
Text(popoverData.output)
}
.popover(isPresented: $isPopoverPresented) {
PopoverView(popoverData: $popoverData, isPresented: $isPopoverPresented)
}
}
}
struct PopoverView: View {
@Binding var popoverData: PopoverData
@Binding var isPresented: Bool
var body: some View {
VStack {
Text("Input: \(popoverData.input)")
Button("Process and Close") {
popoverData.output = "Processed: \(popoverData.input)"
isPresented = false
}
}
}
}