swift - 呈现工作表后显示警报

标签 swift swiftui

我有一个 SwiftUI-View MyView,单击按钮时会显示一个 View Controller 。呈现的 View Controller (在 UIKit 中实现并通过 MyPresentedView 中的 UIViewControllerRepresentable 封装)获取到 isShowingAlert 的绑定(bind)以指示应处理的错误情况通过在工作表关闭后显示警报。

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")))
        }
    }
}

问题:由于所呈现的 View Controller 在仍然呈现时切换 isShowingAlert,因此 SwiftUI 似乎尝试在工作表仍然呈现时呈现警报。这会导致日志消息如下:

Warning: Attempt to present <SwiftUI.PlatformAlertController ...> on ... which is already presenting (null)

是否有适当的方法可以将 .alert 延迟到 .sheet 被关闭之后?

最佳答案

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

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
    }
}

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

关于swift - 呈现工作表后显示警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62180650/

相关文章:

ios - 如何在 IOS 上制作可定制的 View ? (我使用 style.id 作为 android View 类构造函数的参数)

ios - SwiftUI - 用多种样式覆盖系统字体

ios - 如何自定义tableView编辑模式ios

ios - Swift - 在 CollectionView 中设置不同宽度的单元格之间的固定间距

swift - FIREBASE 4 类型 'StorageReference' 的值没有成员 'put'

scrollview - 如何在 SwiftUI 中禁用 ScrollView Bounce

swift - 在 SwiftUI RealityKit 应用程序中加载 DAE 文件

SwiftUI:拖入空列表时崩溃

ios - 样式特征 UITableView 未显示

ios - Xcode 8 - 找不到用户 header 路径