【问题标题】:Completion handler for presentationMode.wrappedValue.dismiss()PresentationMode.wrappedValue.dismiss() 的完成处理程序
【发布时间】:2021-06-11 12:54:00
【问题描述】:

我目前通过执行以下操作来关闭视图:

struct DestinationView: View {
    @Environment(\.presentationMode) private var presentationMode
    var onDismiss: () -> Void

    var body: some View {
        Button("Dismiss") {
            presentationMode.wrappedValue.dismiss()
            onDismiss()
        }
    }
}

一旦视图被关闭,我通过调用onDismiss 通知父视图以触发父视图中的操作。
但是,我的操作触发得太早了,因为在调用 onDismiss 时,此视图尚未完成关闭,因此我在父视图中看到与竞争条件相关的问题。

我可以利用与.dismiss(animated:completion:) 等效的方法吗?

PS 额外的上下文:
我正在解雇 UIViewControllerRepresentable 的协调员。

【问题讨论】:

    标签: ios swift swiftui


    【解决方案1】:

    您应该延迟调用它以完成动画,例如

    Button("Dismiss") {
        presentationMode.wrappedValue.dismiss()
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
           onDismiss()
        }
    }
    

    【讨论】:

    • 太不确定了。
    • 是的,到目前为止,这也是我的解决方法,但它显然不是一个解决方案,因为我们只是在猜测时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多