呈现工作表时,不触发SwiftUI onDismiss(Xcode Beta 5)

时间:2019-08-07 21:41:46

标签: swiftui ios13

在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问题?

2 个答案:

答案 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触发。