I currently have a List
that is inside a modal (.sheet
) view, and I'm trying to retrieve the tapped value from it back to the previous view. How can I achieve this?
import SwiftUI
struct ContentView: View {
@State var showingModal: Bool = false
var body: some View {
VStack {
Button(action: {
self.showingModal.toggle()
}) {
Text("Tap me!")
}.sheet(isPresented: $showingModal, onDismiss: {
print("Dismissed")
}) {
ModalView(isShowing: self.$showingModal)
}
Text("Selected Item: ")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
import SwiftUI
struct ModalView: View {
@State private var names = ["Foo", "Bar"]
@Binding var isShowing: Bool
var body: some View {
List(names, id: \.self) { name in
HStack {
Text("\(name)")
Spacer()
}
.contentShape(Rectangle())
.onTapGesture {
print(name)
self.isShowing = false
}
}
}
}
struct ModalView_Previews: PreviewProvider {
@State static var value = true
static var previews: some View {
ModalView(isShowing: self.$value)
}
}
I'd like to set the text on the Text
with "Selected item"
in this example.
You shouldn't! Your .sheet view should update your model then this changes got reflected in your previous view if needed.
Here is a good resource explaining this communication: https://youtu.be/4GjXq2Sr55Q