首页 > 解决方案 > 按钮,如何在导航栏中嵌入的swiftUI中打开新视图

问题描述

我在NavigationBar. 我正在尝试制作按钮以打开一个新的View名为DetailView

我尝试使用NavigationLink,但它在按钮内不起作用。

import SwiftUI

struct ContentView: View {

    @ObservedObject var dm: DataManager

    @State var isAddPresented = false
    var body: some View {
        NavigationView {
            HStack {
                List () {
                    ForEach (dm.storage) { data in
                        StileCella(dm2: data)
                    }
                }
                .navigationBarTitle("Lista Rubrica")
                .navigationBarItems(trailing: Button(action: {
                        self.isAddPresented = true
                   // Load here the DetailView??? How??
                        DetailView()
                    }) {
                        Text("Button")
                    })
            }
        }
    }
}



struct DetailView: View {

    var body: some View {
        VStack(alignment: .center) {
            Text("CIAO").bold()
            Spacer()
            Image(systemName: "star")
                .resizable()
        }
    }
}

标签: swiftswiftui

解决方案


您只需要在视图中添加一个工作表修饰符,它会根据 isAddPresented 的值呈现您的视图,就像这样:

struct ContentView: View {

    @State var isAddPresented = false

    var body: some View {
        NavigationView {
            List(dm.storage){ data in
                StileCella(dm2: data)
            }
            .navigationBarTitle("Lista Rubrica")
            .navigationBarItems(trailing: Button("Button") {
                self.isAddPresented = true
            })
        }   .sheet(isPresented: $isAddPresented,
                   onDismiss: { self.isAddPresented = false }) {
                        DetailView()
                    }
    }
}

重要的是要记住在关闭时将 isAddPresented 设置回 false 以防止它再次出现。


推荐阅读