LazyVGrid onTapGesture 导航到下一个屏幕 swiftUI

时间:2021-03-05 07:12:37

标签: swiftui swiftui-navigationlink

我对 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' 初始值设定项的结果未使用

有人可以指导我,如何做到这一点吗?

1 个答案:

答案 0 :(得分:2)

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


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

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

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