ios 如何删除一个工作表,然后转到另一个视图?

h7wcgrx3  于 2023-08-08  发布在  iOS
关注(0)|答案(2)|浏览(81)

我的目标是:
1.要关闭工作表,按钮在工作表中,然后转到另一个视图。
1.当用户返回时,工作表应再次弹出。
我尝试过的:
1.我想使用NavigationLink(titleKey: LocalizedStringKey, destination: View, isActive: Binding<Bool>),但它已被弃用。

struct ContentView: View {
    @State private var isPresented = true
    @State private var selection: PresentationDetent = .medium
    
    var body: some View {
        NavigationView {
            VStack {
                Text("hello")
                
                // navigate to this
                NavigationLink {
                    Text("hello world")
                } label: {
                }
                
                Spacer()
            }
        }
        .sheet(isPresented: $isPresented) {
            VStack {
                Text("world")
                    .presentationDetents([.medium, .large], selection: $selection)
                    .interactiveDismissDisabled(true)
                    .presentationDragIndicator(.hidden)
                
                Button {
                    isPresented = false
                } label: {
                    Text("start")
                }
            }
        }
        .padding()
    }
}

字符串

zysjyyx4

zysjyyx41#

当前解决方案:不知道这是否遵循苹果HIG或没有。

struct ContentView: View {
    @State private var isPresented = true
    @State private var selection: PresentationDetent = .medium
    
    var body: some View {
        NavigationStack {
            VStack {
                Text("hello")
                
                Spacer()
            }
            .sheet(isPresented: $isPresented) {
                VStack {
                    Text("world")
                        .presentationDetents([.medium, .large], selection: $selection)
                        .interactiveDismissDisabled(true)
                        .presentationDragIndicator(.hidden)
                    
                    Button {
                        isPresented = false
                    } label: {
                        Text("start")
                    }
                }
            }
            .navigationDestination(isPresented: Binding(
                get: { !isPresented },
                set: { isPresented = !$0 }
            ), destination: {
                Text("hello world")
            })
        }
    }
}

字符串

tmb3ates

tmb3ates2#

所以NavigationView也被弃用了,你应该考虑迁移到NavigationStack。有关更多信息,请参阅NavigationLink for iOS15 and iOS16
下面的版本只有一个导航目的地,就像你一样。但是如果你想添加更多的东西(只需添加更多的枚举案例和更多的导航链接),这个框架已经到位。
1.要关闭工作表,按钮在工作表中,然后转到另一个视图。
通过将适当的枚举附加到导航路径,以编程方式导航到目标视图。这在工作表内容的.onDisappear回调中完成。您也可以在按钮回调中执行此操作,但如果工作表首先被解除,则动画效果会很好。
1.当用户返回时,工作表应再次弹出。
这是通过在目标视图的.onDisappear回调中设置isPresented标志来实现的。

enum MyNavDestination {
    case helloWorld
}

struct ContentView: View {

    @State private var navPath = [MyNavDestination]()
    @State private var isPresented = true
    @State private var selection: PresentationDetent = .medium

    var body: some View {
        NavigationStack(path: $navPath) {
            VStack {
                Text("hello")

                // navigate to this
                NavigationLink(value: MyNavDestination.helloWorld) {
                    Text("hello world")
                }
                Spacer()
            }
            .navigationDestination(for: MyNavDestination.self) { navDestination in
                switch navDestination {
                case .helloWorld:
                    Text("hello world")
                        .onDisappear { isPresented = true }
                }
            }
        }
        .sheet(isPresented: $isPresented) {
            VStack {
                Text("world")
                    .presentationDetents([.medium, .large], selection: $selection)
                    .interactiveDismissDisabled(true)
                    .presentationDragIndicator(.hidden)

                Button {
                    isPresented = false
                } label: {
                    Text("start")
                }
            }
            .onDisappear {
                navPath.append(.helloWorld)
            }
        }
        .padding()
    }
}

字符串

相关问题