Ios SwiftUI无法取消显示的第二张工作表
我有一个带有“Show sheet”按钮的快捷界面视图,当按下该按钮时,我想在工作表上显示第一个视图。该视图有一个按钮可以自行关闭。如果再次按下“显示工作表”按钮,现在我想显示工作表上的第二个视图,它还有“关闭”按钮。代码如下:Ios SwiftUI无法取消显示的第二张工作表,ios,swift,swiftui,Ios,Swift,Swiftui,我有一个带有“Show sheet”按钮的快捷界面视图,当按下该按钮时,我想在工作表上显示第一个视图。该视图有一个按钮可以自行关闭。如果再次按下“显示工作表”按钮,现在我想显示工作表上的第二个视图,它还有“关闭”按钮。代码如下: struct FirstSheetView: View { @Binding var isPresented: Bool var body: some View { Button("Dismiss") {
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()
}
}
工作表显示得很好,我可以关闭第一张工作表,但不能关闭第二张工作表(只需向下滑动),但按下“关闭”按钮似乎没有任何作用。可能是什么问题?问题是
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
}
}
}