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