在SwiftUI中,我试图在关闭工作表但未调用'onDismiss'闭包后运行一些代码。
我正在运行Xcode Beta 5,目标是IOS 13
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() }
}
}
我应该看到:
Dismiss Button Pressed
Modal Dismissed
但我只能得到
Dismiss Button Pressed
我是不是在做一些愚蠢的事情,或者这是另一个beta问题?
答案 0 :(得分:7)
您的代码对我来说不错。当您使用滑动手势关闭模态视图时,将调用onDismiss
(如您所愿),但是当您使用self.presentationMode.value.dismiss()
退出模态视图时,不会调用onDismiss
,这就像一个臭虫给我。我看不出您的代码不起作用的任何原因。
与此同时,一种解决方法是将ModalView
闭包传递给self.presentationMode.value.dismiss()
,然后在调用x << 15
之后再调用它。
答案 1 :(得分:0)
我正在使用SwiftUI并运行Xcode12。在将作为工作表显示的视图中,我具有以下内容:
@Environment(\.presentationMode) var presentationMode
然后在按下按钮时运行以下命令:
presentationMode.wrappedValue.dismiss()
无论我按下按钮是关闭还是滑动以关闭,都会导致.onDismiss触发。