我对 swiftUI 还很陌生。我创建了一个 GridView ,点击后我想进入下一个屏幕。但不知怎的,我无法设法推到下一个屏幕。我这样做是这样的:
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")
}
}
这样做后,我收到一条警告
Result of 'NavigationLink<Label, Destination>' initializer is unused
有人可以指导我如何做到这一点吗?
最佳答案
.onTapGesture
添加当 View 识别出点击手势时要执行的操作。在您的情况下,您不需要使用 .onTapGesture
。如果您想在点击单元格时转到另一个 View ,您需要编写 NavigationLink
如下。
NavigationLink(destination: PokemonDetailView(pokemon: pokemon)) {
PokemonCell(pokemon: pokemon, viewModel: viewModel)
}
如果您想使用 .onTapGesture
,另一种方法是为点击单元格的神奇宝贝创建 @State
并使用 NavigationLink
的 isActive
绑定(bind)。因此,当用户点击单元格时,它将更改 @State
并切换 .onTapGesture
中的 isActive
。您可能需要为此添加另一个堆栈(ZStack
等)。
NavigationView {
ZStack {
NavigationLink("", destination: PokemonDetailView(pokemon: pokemon), isActive: $isNavigationActive).hidden()
ScrollView {
// ...
关于swiftui - LazyVGrid onTapGesture 导航到下一个屏幕 swiftUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66488242/