LazyVGrid onTapGesture 导航到下一个屏幕 swiftUI

Posted

技术标签:

【中文标题】LazyVGrid onTapGesture 导航到下一个屏幕 swiftUI【英文标题】:LazyVGrid onTapGesture navigate to next screen swiftUI 【发布时间】:2021-06-03 21:07:22 【问题描述】:

我对 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】:

.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 
                            // ...

【讨论】:

以上是关于LazyVGrid onTapGesture 导航到下一个屏幕 swiftUI的主要内容,如果未能解决你的问题,请参考以下文章

LazyVGrid 中的 NavigationLink 循环返回所有条目,SwiftUI

swiftui+combine:为啥滚动 LazyVGrid 时 isFavoriteO 改变了?

SwiftUI LazyVGrid 不显示两列

onTapgesture 禁用 View SwiftUI 的按钮

LazyVGrid 列表中的单元格有时会消失

SwiftUI LazyvGrid 中的统一单元格大小