【发布时间】:2020-11-09 05:54:20
【问题描述】:
当用户单击一个按钮时,我有一个工作表视图,如下面的父视图所示:
struct ViewWithSheet: View {
@State var showingSheetView: Bool = false
@EnvironmetObject var store: DataStore()
var body: some View {
NavigationView() {
ZStack {
Button(action: { self.showingSheetView = true }) {
Text("Show sheet view")
}
}
.navigationBarHidden(true)
.navigationBarTitle("")
.sheet(isPresented: $showingSheetView) {
SheetView(showingSheetView: self.$showingSheetView).environmentObject(self.dataStore)
}
}
}
}
在工作表视图中,当用户单击另一个按钮时,具有完成处理程序的商店会执行一个操作。完成处理程序返回一个对象值,如果该值存在,则应关闭 SheetView。
struct SheetView: View {
@Binding var showingSheetView: Bool
@EnvironmentObject var store: DataStore()
//@Environment(\.presentationMode) private var presentationMode
func create() {
store.createObject() { object, error in
if let _ = object {
self.showingSheetView = false
// self.presentationMode.wrappedValue.dismiss()
}
}
}
var body: some View {
VStack {
VStack {
HStack {
Button(action: { self.showingSheetView = false }) {
Text("Cancel")
}
Spacer()
Spacer()
Button(action: { self.create() }) {
Text("Add")
}
}
.padding()
}
}
}
}
但是,在 create() 函数中,一旦商店返回值并且将showingSheetView 设置为false,工作表视图不会按预期关闭。我也尝试过使用 PresentationMode 来关闭工作表,但这似乎也不起作用。
【问题讨论】:
标签: ios swift xcode swiftui ios13