一个简单的库,用于安全地在 SwiftUI 中呈现 sheet 和其他模态视图。
它旨在解决这类问题
Currently, only presenting a single sheet is supported.
The next sheet will be presented when the currently presented sheet gets dismissed.
该库旨在成为一个即插即用的替代方案,用于在使用 @State
或 @Published
时呈现 sheet。
如果您尝试在已呈现一个 sheet 的同时呈现一个新的 sheet,它将自动关闭之前的 sheet,然后再显示新的 sheet。
对于使用 @ModalState
的 @State
struct ContentView: View {
@ModalState private var isShowingSheet1 = false
@ModalState private var isShowingSheet2 = false
var body: some View {
VStack {
Button("Show sheet 1") {
isShowingSheet1 = true
}
}
.sheet(isPresented: $isShowingSheet1) {
VStack {
Text("Sheet 1")
Button("Show sheet 2") {
isShowingSheet2 = true
}
}
}
.sheet(isPresented: $isShowingSheet2) {
Text("Sheet 2")
}
}
}
对于在 ObservableObject
中使用 @ModalPublished
的 @Published
class SomeObject: ObservableObject {
@ModalPublished var isShowingSheet1 = false
@ModalPublished var isShowingSheet2 = false
}
struct ContentView: View {
@StateObject private var someObject = SomeObject()
var body: some View {
VStack {
Button("Show sheet 1") {
someObject.isShowingSheet1 = true
}
}
.sheet(isPresented: $someObject.isShowingSheet1) {
VStack {
Text("Sheet 1")
Button("Show sheet 2") {
someObject.isShowingSheet2 = true
}
}
}
.sheet(isPresented: $someObject.isShowingSheet2) {
Text("Sheet 2")
}
}
}
可选地,您可以为 ModalState/Published(context: "SomeContextKey")
提供一个上下文,以便在同一视图中打开嵌套的 sheet。
此软件包根据宽松的 ApacheV2 许可证提供,供您享用。