json 如何在Swiftui中通过导航链接将索引从网格视图传递到下一个视图

np8igboo  于 2023-06-25  发布在  Swift
关注(0)|答案(1)|浏览(138)

这里我有一个字典,其中键是杂货店的类别,如蔬菜和水果等。值是该类别的项目及其细节的字典。我在我的主页中列出了类别名称,我想导航到下一个视图与所选类别的项目从主页。谁来帮帮我。

import SwiftUI
import Kingfisher
struct ContentView: View {
    @ObservedObject var groceryViewModel : ProductViewModel
    let columns : [GridItem] = Array(repeating: .init(.flexible()),count: 3)
    var body: some View {
        let Keys = Array(groceryViewModel.prodType.keys)
        let typeKeys = groceryViewModel.prodType.map{key in
            return key
        }
         var indexes = groceryViewModel.prodType.keys.map { groceryViewModel.prodType.index(forKey: $0) }
        
            
        NavigationView {
            ScrollView{
                LazyVGrid(columns: columns,spacing: 10) {
                    
                    ForEach(Keys,id: \.self){ item in
                        VStack(alignment: .center,spacing: 4){
                            Spacer()
                            NavigationLink(destination: ProductListView(groceryViewModel: ProductViewModel(), item: item) /*ProductListView(groceryViewModel: ProductViewModel())*/,label:{
                                VStack {
                                    Image(item)
                                        .resizable()
                                        .clipShape(Circle())
                                        .scaledToFill()
                                        .frame(width:
                                                100,height: 100)
                                        
                                    Text(item)
                                        .font(.system(.headline,weight: .bold))
                                        .foregroundColor(.black)
                                    
                                    
                                }
                            }
                            
                      )
                            
                        }
                        
                    }
                    
                }
                    
                    
                    .onAppear {
                        groceryViewModel.readJSONFile(filename: "Groceries")
                    }
               }
             .navigationBarTitle(Text("Categories"),displayMode: .inline)
        }
     }
}
struct ContentView_Previews : PreviewProvider {
    static var previews: some View{
        ContentView(groceryViewModel: ProductViewModel())
    }
    
}
vwkv1x7d

vwkv1x7d1#

要使用特定String值从网格导航到下一个视图,请将String传递到下一个视图的导航标题,您可以使用SwiftUI中的NavigationLink视图。在显示网格的ForEach循环中,您可以将每个项目 Package 在NavigationLink中,并将相应的String作为参数传递给下一个视图。下面是一个例子:

ForEach(groceryViewModel.prodType.keys.sorted(), id: \.self) { item in
    NavigationLink(destination: ProductListView(groceryViewModel: ProductViewModel(), category: item)) {
        Text(item)
            .font(.system(.headline, weight: .bold))
            .foregroundColor(.black)
    }
}

在上面的代码中,ProductListView是您要导航到的下一个视图,category是您要传递给下一个视图的String类型的参数。然后可以使用此参数在下一个视图中显示相应的值并设置导航标题。下面是一个如何在下一个视图中设置导航标题的示例:

struct ProductListView: View {
    let groceryViewModel: ProductViewModel
    let category: String
    
    var body: some View {
        VStack {
            // Display the values of the selected category here
        }
        .navigationBarTitle(Text(category), displayMode: .inline)
    }
}

category是从上一个视图传递的参数,可以使用它来设置导航标题(使用navigationBarTitle修饰符)。

相关问题