gpt4 book ai didi

ios - SwiftUI 关闭多个模态表

转载 作者:行者123 更新时间:2023-12-02 02:52:03 25 4
gpt4 key购买 nike

我在 Root View 中使用 .sheet(isPresented: self.$showModal) 来呈现模式。在模式中,我使用 NavigationView 引导用户浏览各个页面(用于用户配置文件生成器)。

在导航堆栈的最后一页中,我使用 @Environment(\.presentationMode) varpresentationMode 和一个调用 self.presentationMode.wrappedValue.dismiss() 的按钮code> 关闭模式。但是,这只会消除导航堆栈中的最后一页,而我最终会到达上一页。我想要做的是关闭整个导航堆栈并最终回到 Root View 。

向下滑动以关闭模式会产生所需的结果,但我想使用按钮以编程方式执行此操作。

目前这在 SwiftUI 中可行吗?或者这是在模式表中使用 NavigationView 时出现的问题吗?

最佳答案

解决方案 1 - 自定义环境 key

一个可能的解决方案是使用注入(inject)到每个环境的自定义EnvironmentKey:

struct PresentationKey: EnvironmentKey {
static let defaultValue: [Binding<Bool>] = []
}

extension EnvironmentValues {
var presentations: [Binding<Bool>] {
get { return self[PresentationKey] }
set { self[PresentationKey] = newValue }
}
}
<小时/>

演示:

enter image description here

struct ContentView: View {
@Environment(\.presentations) private var presentations
@State private var showSheet = false

var body: some View {
Button("Show sheet") {
showSheet = true
}
.sheet(isPresented: $showSheet) {
SheetView()
.environment(\.presentations, presentations + [$showSheet])
}
}
}
struct SheetView: View {
@Environment(\.presentations) private var presentations
@State private var showSheet = false

var body: some View {
Button("Show another sheet") {
showSheet = true
}
.sheet(isPresented: $showSheet) {
SheetNavigationView()
.environment(\.presentations, presentations + [$showSheet])
}
}
}
struct SheetNavigationView: View {
var body: some View {
NavigationView {
NavigationLink("Link", destination: SheetNavigationDetailView())
}
}
}
struct SheetNavigationDetailView: View {
@Environment(\.presentations) private var presentations

var body: some View {
Button("Pop to root") {
presentations.forEach {
$0.wrappedValue = false
}
}
}
}
<小时/>

解决方案 2 - 关闭 UIKit rootViewController

struct SheetNavigationDetailView: View {

var body: some View {
Button("Pop to root") {
UIApplication.shared.windows.first?.rootViewController?.dismiss(animated: true)
}
}
}

关于ios - SwiftUI 关闭多个模态表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58297472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com