提交工作表后显示警报

时间:2020-06-03 18:59:28

标签: swift swiftui

我有一个SwiftUI-View MyView,当单击一个按钮时,它会显示一个视图控制器。呈现的视图控制器(在UIKit中实现,并通过UIViewControllerRepresentable中的MyPresentedView 包装)绑定到isShowingAlert,以指示错误情况,应通过在关闭工作表后显示警报来处理该错误情况

struct MyView: View {
    @State private var isShowingSheet = false
    @State private var isShowingAlert = false

    var body: some View {
        Button(action: { self.isShowingSheet.toggle() }) {
            Text("Show Sheet")
        }
        .sheet(isPresented: $isShowingSheet) {
            MyPresentedView(alert: self.$isShowingAlert)
        }
        .alert(isPresented: $isShowingAlert) {
            Alert(title: Text("title"), message: Text("message"), dismissButton: .default(Text("OK")))
        }
    }
}

问题:由于所呈现的视图控制器在isShowingAlert仍在显示时会进行切换,因此SwiftUI似乎试图在仍显示工作表的同时显示警报。这样会产生日志消息,例如:

警告:尝试在已经显示(为空)的...上显示

是否有适当的方法将.alert推迟到.sheet被解雇之后?

1 个答案:

答案 0 :(得分:0)

仅作记录,以下是我在评论中提到的潜在解决方案的草图:

struct MyView: View {
    @State private var isShowingSheet   = false
    @State private var errorDuringSheet = false
    @State private var isShowingAlert   = false

    var body: some View {
        Button(action: { self.isShowingSheet.toggle() }) {
            Text("Show Sheet")
        }
        .sheet(isPresented: $isShowingSheet, onDismiss: propagateError) {
            MyPresentedView(alert: self.$errorDuringSheet)
        }
        .alert(isPresented: $isShowingAlert) {
            Alert(title: Text("title"), message: Text("message"), dismissButton: .default(Text("OK")))
        }
    }

    func propagateError() {
        isShowingAlert   = errorDuringSheet
        errorDuringSheet = false
    }
}

仍然欢迎任何更好的解决方案。