如何在 SwiftUI

问题描述

我正在制作问题集列表,并希望整行导航到下一个视图(每一行都有不同的目标视图),但只有文本旁边的区域是可点击的。我尝试在 List 之外创建一个 SetRow() 并且它工作得很好,但是当它在 List 内部时,只有空白区域在工作。

Red is the working area

在此处列出代码

NavigationView {
            vstack {
                SearchBar(input: $searchInput)
                List(viewmodel.filterList(by: searchInput)) { setVM in
                    NavigationLink(destination:
                        SetView(viewmodel: QuestionListviewmodel(
                                            emoji: setVM.questionSet.emoji,title: setVM.questionSet.title,setID: setVM.questionSet.id)
                            ))
                    {
                        SetRow(viewmodel: setVM)
                    }
                    .onLongPressGesture(minimumDuration: 1) {
                        selectedSetVM = setVM
                        showDeletealert.toggle()
                    }
                    
                }
                .listStyle(PlainListStyle())
                
            }

和此处的 SetRow 代码

HStack {
            Text(viewmodel.questionSet.emoji)
                .font(.system(size: 50))
            vstack(alignment: .leading) {
                Text(viewmodel.questionSet.title)
                    .font(.system(size: 20,weight: .semibold,design: .default))
                vstack(alignment: .leading) {
                    Text("Questions: \(viewmodel.questionSet.size)")
                        .font(.system(size: 15,weight: .light,design: .default))
                        .foregroundColor(.gray)
                    Text("Updated: \(viewmodel.questionSet.lastUpdated,formatter: taskDateFormat)")
                        .font(.system(size: 15,design: .default))
                        .foregroundColor(.gray)
                }
            }
            Spacer()
        }
        .padding(.top,10)

解决方法

问题出在您的“longPressGesture”上,它用于控制行的内容并监听 longPresses。为避免这种情况,您可以使用“onTapGesture”来控制 NavigationLink 的激活,并使用“onLongPressGesture”来激活您的 actionSheet 或 Alert。

这是一个演示用法的简短代码示例: https://stackoverflow.com/a/67099257