[SwiftUI]传值跳转新页面及返回上一页

列表页:

使用NavigationLink跳转

import SwiftUI

struct MPAlbumView: View {
    
    @State var dataArr: [MPAlbumModel] = []
    
    var body: some View {
        ScrollView {
            LazyVStack {
                ForEach(dataArr) { item in
                    NavigationLink(destination: MPAlbumDetailView(model: item)) {
                        HStack() {
                            Image(item.name)
                                .resizable()
                                .scaledToFill()
                                .frame(width: 100, height: 60)
                                .clipped()
                            Text(item.name)
                                .frame(maxWidth: .infinity, alignment: .leading)
                                .foregroundColor(Color.black)
                            Image(systemName: "chevron.forward")
                                .foregroundColor(Color.black)
                        }
                        .padding(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 10))
                    }
                    Divider()
                }
            }
            .onAppear {
                createDataArr()
            }
        }
        .padding(EdgeInsets(top: 1, leading: 0, bottom: 0, trailing: 0))
    }
    
    private func createDataArr() {
        dataArr.removeAll()
        var arr: [MPAlbumModel] = []
        arr.append(MPAlbumModel(name: "IMG_5221"))
        arr.append(MPAlbumModel(name: "IMG_5968"))
        arr.append(MPAlbumModel(name: "IMG_5969"))
        dataArr.append(contentsOf: arr)
    }
    
}

struct MPAlbumView_Previews: PreviewProvider {
    static var previews: some View {
        MPAlbumView()
    }
}

struct MPAlbumModel: Identifiable {
    let name: String
    var id: String { name }
}

详情页:

自定义导航上的返回按钮

使用环境包装器(Environment)返回上页

import SwiftUI

struct MPAlbumDetailView: View {
    
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    //@Environment(\.dismiss) var dismiss // #available(iOS 15.0, *)

    var model : MPAlbumModel?

    var body: some View {
        NavigationView {
            Image(model?.name ?? "")
                .resizable()
                .scaledToFit()
                .frame(maxWidth: .infinity, maxHeight: .infinity)
                .clipped()
        }
        .navigationTitle("\(model?.name ?? "")")
        .navigationBarBackButtonHidden()
        .toolbar {
            ToolbarItem(placement: .navigationBarLeading) {
                Button {
                    presentationMode.wrappedValue.dismiss()
                    //dismiss()
                } label: {
                    Image(systemName: "chevron.backward")
                        .foregroundColor(Color.black)
                }
            }
        }
    }
    
}

struct MPAlbumDetailView_Previews: PreviewProvider {
    static var previews: some View {
        MPAlbumDetailView()
    }
}

示意图:

猜你喜欢

转载自blog.csdn.net/u012881779/article/details/129974962