In SwiftUI I am trying to get some code to run after a sheet has been dismissed but the 'onDismiss' closure in not called.
I'm running Xcode Beta 5, with an IOS 13 build target
import SwiftUI
struct ModalView : View {
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View {
Group {
Text("Modal view")
Button(action: { print("Dismiss button pressed"); self.presentationMode.value.dismiss() }) { Text("Dismiss") }
}
}
}
struct ContentView: View {
@State var showModal: Bool = false
var body: some View {
Button(action: { self.showModal = true }) { Text("Show modal via .sheet modifier") }
.sheet(isPresented: $showModal, onDismiss: { print("Modal Dismissed") }) { ModalView() }
}
}
I should see:
Dismiss Button Pressed
Modal Dismissed
but I only get
Dismiss Button Pressed
Am I doing something stupid or is this another beta issue?
Your code looks fine to me. onDismiss
is called when you use the swipe gesture to dismiss the modal view (as you would expect), but it isn't called when you use self.presentationMode.value.dismiss()
to dismiss the modal view, which just seems like a bug to me. I don't see any reason why your code shouldn't work.
A workaround in the meantime could be to pass an onDismiss
closure to your ModalView
, and then call it after calling self.presentationMode.value.dismiss()
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With