这里我有一个字典,其中键是杂货店的类别,如蔬菜和水果等。值是该类别的项目及其细节的字典。我在我的主页中列出了类别名称,我想导航到下一个视图与所选类别的项目从主页。谁来帮帮我。
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())
}
}
1条答案
按热度按时间vwkv1x7d1#
要使用特定String值从网格导航到下一个视图,请将String传递到下一个视图的导航标题,您可以使用SwiftUI中的NavigationLink视图。在显示网格的ForEach循环中,您可以将每个项目 Package 在NavigationLink中,并将相应的String作为参数传递给下一个视图。下面是一个例子:
在上面的代码中,ProductListView是您要导航到的下一个视图,category是您要传递给下一个视图的String类型的参数。然后可以使用此参数在下一个视图中显示相应的值并设置导航标题。下面是一个如何在下一个视图中设置导航标题的示例:
category是从上一个视图传递的参数,可以使用它来设置导航标题(使用navigationBarTitle修饰符)。