`View.ondrag (_ :)` вызывается снова после `dropdelegate.performdrop (info :)`IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 `View.ondrag (_ :)` вызывается снова после `dropdelegate.performdrop (info :)`

Сообщение Anonymous »

Я пытаюсь реализовать перетаскивание в моем VSTACK. Я реализовал Dropdelegate, как SO: < /p>

Код: Выделить всё

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))
}
}
}
}
}
Как вы можете видеть, я добавил несколько консольных отпечатков в обоих ondrag (_ :) и recomerdrop (info :) . И отпечатки такими же: < /p>
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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • NullPointerException: попытка вызвать виртуальный метод 'android.view.view android.view.view.findviewbyid (int)' на ссыл
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • NullPointerException: попытка вызвать виртуальный метод 'android.view.view android.view.view.findviewbyid (int)' на ссыл
    Anonymous » » в форуме Android
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • SwiftUI onDrop не работает с DropDelegate на iOS18
    Anonymous » » в форуме IOS
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • SwiftUI onDrag – нет обратной связи по окончании перетаскивания
    Anonymous » » в форуме IOS
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Проблема «запаздывания» onDrag в iOS 18
    Anonymous » » в форуме IOS
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»