我对 swiftUI 很陌生。我在点击时创建了一个网格视图,我想转到下一个屏幕。但不知何故,我无法推送到下一个屏幕。我是这样做的:
var body: some View {
NavigationView {
ScrollView {
LazyVGrid(columns: gridItems, spacing: 16) {
ForEach(viewModel.pokemon) { pokemon in
PokemonCell(pokemon: pokemon, viewModel: viewModel)
.onTapGesture {
NavigationLink(destination: PokemonDetailView(pokemon: pokemon)) {
Text(pokemon.name)
}
}
}
}
}
.navigationTitle("Pokedex")
}
}
这样做后,我收到一条警告说明
<块引用>'NavigationLink
有人可以指导我,如何做到这一点吗?
答案 0 :(得分:2)
.onTapGesture
添加了当视图识别到点击手势时要执行的操作。在您的情况下,您不需要使用 .onTapGesture
。如果您想在点击单元格时转到另一个视图,您需要编写 NavigationLink
如下。
NavigationLink(destination: PokemonDetailView(pokemon: pokemon)) {
PokemonCell(pokemon: pokemon, viewModel: viewModel)
}
如果您想使用 .onTapGesture
,另一种方法是为您点击的单元格的 pokemon 创建 @State
并使用 NavigationLink
的 isActive
绑定。因此,当用户点击单元格时,它会更改 @State
并切换 isActive
中的 .onTapGesture
。您可能需要为此添加另一个堆栈(ZStack
等)。
NavigationView {
ZStack {
NavigationLink("", destination: PokemonDetailView(pokemon: pokemon), isActive: $isNavigationActive).hidden()
ScrollView {
// ...