I have a question about SwiftUI and would like to ask you guys
The problem is described as follows
I am learning to use SwiftUI. I have a file list display window. I encapsulate the files into a structure called FileInfo and use List to display the files obtained through filemanager. I want to select files by mouse selection. But I didn't find SwiftUI support for selection, so I used Zstack to select, but I found that it is difficult to respond to selection and click events at the same time.
Below is my code
ZStack {
List(selection: $localWorkspaceViewModel.selectedFiles) {
ForEach(localWorkspaceViewModel.files.indices, id: \.self) { index in
ZStack {
}
.contextMenu{
// ...
}
.onTapGesture(count: 2) {
// ...
}
.onTapGesture(count: 1) {
// ...
}
.onDrag {
// ...
}
}
.listRowInsets(EdgeInsets())
.listRowSeparator(.hidden)
}
.contextMenu {
// ...
}
.onDrop(of: ["public.data"], isTargeted: nil) { providers in
// ...
}
Color.clear
.contentShape(Rectangle())
.gesture(
DragGesture(minimumDistance: 20)
.onChanged { value in
print()
if !isDragging {
dragStartPoint = value.startLocation
isDragging = true
}
// ...
}
.onEnded { _ in
isDragging = false
}
)
.allowsHitTesting(!isDragging)
if isDragging {
Rectangle()
.fill(Color.blue.opacity(0.2))
.frame(width: selectionRect.width, height: selectionRect.height)
.position(x: selectionRect.midX, y: selectionRect.midY)
.overlay(
Rectangle()
.stroke(Color.blue, lineWidth: 1)
)
.allowsHitTesting(false)
}
}
The code problem is described as follows
When the line of code .allowsHitTesting(!isDragging) sets the static value to true or false, the click and drag event of the List item behaves normally or the box selection of Color.clear behaves normally, but only one of them behaves normally. However, after setting it to !isDragging, only one of them behaves normally.
I would like to ask how to solve this problem. I would be very grateful if you can give me a solution.