当使用 foreach 和 NavigationLink 时,NavigationLink 不会链接到视图。有什么办法可以让它正常工作。
导航视图(){ ZStack(){ 颜色(.systemGray6).ignoresSafeArea()
VStack()
{
ScrollView(.horizontal, showsIndicators: false)
{
HStack()
{
ForEach(MockData.items)
{ item in
ZStack
{
Button(action:{ })
{
NavigationLink( destination: selectedView(name: item.name))
{EmptyView()}
RoundedRectangle(cornerRadius: 10)
.foregroundStyle(item.color.self)
.frame(width: 70, height: 70)
}
Image(systemName: item.image)
.foregroundColor(.white)
.font(.system(size: 30))
.padding(25)
}
}
}//scrollview
//opciones
}//cierre del VStack
.padding(.top, 20)
.padding(.leading)
Spacer()
}//cierre Zstack
} //cierre de Zstack
.navigationTitle("Caracteristicas")
.toolbar{
ToolbarItem(placement: .navigationBarLeading)
{
Button(action:{},
label: {
Image(systemName: "switch.2")})
}
ToolbarItem(placement: .navigationBarTrailing)
{
Button(action:{},
label: {Image(systemName: "person.circle")})
}
}//toolBar
.accentColor(.red)
}
}
}
结构项:可识别、可哈希{
var id = UUID()
var name: String
var color: Color
var image: String
}
@ViewBuilder private func selectedView (name: String) -> some View {
switch name {
case "Medical": MedicalView()
case "Illness": IllnessView()
case "Vaccune": VaccuneView()
case "Dewor": DeworView()
case "Allergie": AllergieView()
default: EmptyView()
}
}
结构模拟数据{ static var items = [Item(name: "Medical" ,color: .red, image:"heart"), 项目(名称:“疾病”,颜色:.blue,图像:“药丸”), 项目(名称:“疫苗”,颜色:.橙色,图像:“注射器”), 项目(名称:“Dewor”,颜色:.green,图像:“微生物”), 项目(名称:“过敏”,颜色:.紫色,图片:“过敏原”)]
}
您将
EmptyView()
作为 NavigationLink
的目的地,因此 NavigationStack
不知道要导航到哪里,因为您提供的作为目的地的视图是空的。
解决方案如下:
NavigationLink {
selectedView(name: item.name)
} label: {
ZStack {
RoundedRectangle(cornerRadius: 10)
.foregroundStyle(item.color.self)
.frame(width: 70, height: 70)
Image(systemName: item.image)
.foregroundColor(.white)
.font(.system(size: 30))
.padding(25)
}
}
第一个闭包提供了
NavigationLink
的目的地,第二个闭包提供了呈现为可点击链接的视图