LazyVGrid onTapGesture 导航到下一个屏幕 swiftUI

LazyVGrid onTapGesture navigate to next screen swiftUI

我对 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")
    }
    
}

这样做后,我收到一条警告,指出

Result of 'NavigationLink<Label, Destination>' initializer is unused

谁能指导我,怎么做?

.onTapGesture 添加一个动作,当视图识别出点击手势时执行。在您的情况下,您不需要使用 .onTapGesture。如果你想在点击单元格时转到另一个视图,你需要像下面这样写 NavigationLink


NavigationLink(destination: PokemonDetailView(pokemon: pokemon)) {
                              PokemonCell(pokemon: pokemon, viewModel: viewModel)
                            }

如果您想使用 .onTapGesture,另一种方法是为您点击的单元格的神奇宝贝创建 @State 并使用 NavigationLinkisActive 绑定。因此,当用户点击单元格时,它会更改 @State 并切换 .onTapGesture 中的 isActive。您可能需要为此添加另一个堆栈(ZStack 等)。

NavigationView {
              ZStack {
                NavigationLink("", destination: PokemonDetailView(pokemon: pokemon), isActive: $isNavigationActive).hidden()
                ScrollView {
                            // ...