【问题标题】:SwiftUI cannot dismiss the second sheet presentedSwiftUI 无法关闭呈现的第二张工作表
【发布时间】:2020-05-13 15:47:48
【问题描述】:

我有一个带有“显示工作表”按钮的 SwiftUI 视图,当按下该按钮时,我想在工作表上显示第一个视图。该视图有一个关闭自身的按钮。如果再次按下显示工作表按钮,现在我想在工作表上显示第二个视图,它也有关闭按钮。代码如下:

struct FirstSheetView: View {
    @Binding var isPresented: Bool

    var body: some View {
       Button("Dismiss") {
                self.isPresented = false
            }
    }
}

struct SecondSheetView: View {
    @Binding var isPresented: Bool

    var body: some View {
       Button("Dismiss") {
                self.isPresented = false
            }
    }
}

enum ActiveSheet {
   case first, second
}

struct ContentView: View {
    @State private var isShowingPhotoSheet = false
    @State private var activeSheet: ActiveSheet = .first

    var body: some View {
            VStack {
                Button(action: {
                    self.isShowingPhotoSheet.toggle()
                }) {
                    Text("Show sheet")
                }
            }
            .sheet(
                isPresented: $isShowingPhotoSheet,
                onDismiss: loadSecondView,
                content: {
                    if self.activeSheet == .first {
                        FirstSheetView(isPresented: self.$isShowingPhotoSheet)
                    } else {
                        SecondSheetView(isPresented: self.$isShowingPhotoSheet)
                    }
                }
            )
    }

    private func loadSecondView() {
            activeSheet = .second
            self.isShowingPhotoSheet.toggle()

    }
}

工作表显示得很好,我可以关闭第一张工作表,但不能关闭第二张工作表(只能向下滑动),但按下“关闭”按钮似乎没有任何作用。可能是什么问题?

【问题讨论】:

    标签: ios swift swiftui


    【解决方案1】:

    问题是onDismiss 设置第二张表还为时过早,第一张仍在屏幕上并绑定到状态。

    这里有一个解决方案。使用 Xcode 11.4 / iOS 13.4 测试

    private func loadSecondView() {
        if activeSheet == .second {
            activeSheet = .first
        } else {
            activeSheet = .second
    
            // give time to close first sheet
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                self.isShowingPhotoSheet = true
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      相关资源
      最近更新 更多