Код: Выделить всё
private struct StandardDropDelegate: DropDelegate {
let destinationItem: StandardReorderedListItem
@Binding var sourceContent: [StandardReorderedListItem]
@Binding var draggedItem: StandardReorderedListItem?
func dropUpdated(info: DropInfo) -> DropProposal? {
return DropProposal(operation: .move)
}
func performDrop(info: DropInfo) -> Bool {
print("dropped item: \(String(describing: draggedItem))\n===========================")
self.draggedItem = nil
return true
}
func dropEntered(info: DropInfo) {
guard let draggedItem,
let fromIndex = sourceContent.firstIndex(of: draggedItem),
let toIndex = sourceContent.firstIndex(of: destinationItem),
fromIndex != toIndex else { return }
withAnimation(.easeInOut) {
self.sourceContent.move(fromOffsets: IndexSet(integer: fromIndex),
toOffset: (toIndex > fromIndex ? (toIndex + 1) : toIndex))
}
}
}
< /code>
и в самом представлении: < /p>
public struct StandardReorderedListView: View {
@Binding private var content: [StandardReorderedListItem]
@State private var draggedItem: StandardReorderedListItem?
private let type: ReorderedListType = .standard
public init(_ content: Binding) {
self._content = content
}
@ViewBuilder
public var body: some View {
ScrollView(.vertical) {
VStack {
ForEach(content) { item in
ReorderedListItemView(state: .constant(.active), // Don't care
isDragging: Binding(get: { self.draggedItem?.id == item.id }, set: { _ in }),
label: item.label,
itemType: type,
icon: item.icon,
action: item.action)
.onDrag {
print("drag item: \(item)\n===========================")
self.draggedItem = item
return NSItemProvider(object: item.id.uuidString as NSString )
}
.onDrop(of: [.text],
delegate: StandardDropDelegate(destinationItem: item,
sourceContent: $content,
draggedItem: $draggedItem))
}
}
}
}
}


drag item: StandardReorderedListItem(id: 3BDFE0B4-58DF-42C0-8FAB-109D3BFD191E, label: "Item 1", icon: Optional(SwiftUI.Image(provider: SwiftUI.ImageProviderBox)), action: Optional((Function)))
===========================
dropped item: Optional(StandardReorderedListItem(id: 3BDFE0B4-58DF-42C0-8FAB-109D3BFD191E, label: "Item 1", icon: Optional(SwiftUI.Image(provider: SwiftUI.ImageProviderBox)), action: Optional((Function))))
===========================
drag item: StandardReorderedListItem(id: 3BDFE0B4-58DF-42C0-8FAB-109D3BFD191E, label: "Item 1", icon: Optional(SwiftUI.Image(provider: SwiftUI.ImageProviderBox)), action: Optional((Function)))
===========================
< /code>
Здесь вы можете видеть, что представление перетаскивается снова сразу после выполнения падения. Несмотря на то, что это вообще не было затронуто сразу после того, как я перетаскивал и сбросил вид. Кто -нибудь может помочь мне понять и исправить, что здесь происходит? Спасибо.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... rmdropinfo