SwiftUI onDismiss 在呈现 sheet(Xcode Beta 5)时不触发
SwiftUI onDismiss not firing when presenting a sheet (Xcode Beta 5)
在 SwiftUI 中,我试图在 sheet 被关闭但未调用 '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
我是在做傻事还是这是另一个测试版问题?
我觉得你的代码没问题。 onDismiss
在您使用滑动手势关闭模态视图时被调用(正如您所期望的那样),但是当您使用 self.presentationMode.value.dismiss()
关闭模态视图时它不会被调用,这看起来像是错误给我。我看不出您的代码无法正常工作的任何原因。
同时的解决方法是将 onDismiss
闭包传递给您的 ModalView
,然后在调用 self.presentationMode.value.dismiss()
后调用它。
在 SwiftUI 中,我试图在 sheet 被关闭但未调用 '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
我是在做傻事还是这是另一个测试版问题?
我觉得你的代码没问题。 onDismiss
在您使用滑动手势关闭模态视图时被调用(正如您所期望的那样),但是当您使用 self.presentationMode.value.dismiss()
关闭模态视图时它不会被调用,这看起来像是错误给我。我看不出您的代码无法正常工作的任何原因。
同时的解决方法是将 onDismiss
闭包传递给您的 ModalView
,然后在调用 self.presentationMode.value.dismiss()
后调用它。