如何使整个列表行成为 SwiftUI 中的 NavigationLink

How to make whole List row a NavigationLink in 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, weight: .light, design: .default))
                        .foregroundColor(.gray)
                }
            }
            Spacer()
        }
        .padding(.top, 10)

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

这是一个演示用法的简短代码示例: