Функция SwiftUI OnDrop в зависимости от условия - PullRequest
3 голосов
/ 07 апреля 2020

Мы используем функцию OnDrop() в SwiftUI для приложения MacOS. Это работает действительно здорово. Однако я хочу разрешить функцию onDrop только при особых условиях. Я пытался выполнить код после onDrag, только если это условие истинно, и это прекрасно работает. Однако эффект анимации перетаскивания / перетаскивания мыши все еще остается видимым, который не должен быть видимым.

Вот код, который мы используем:

.onDrop(of: [“public.file-url”], isTargeted: $userData.shopPopOver) { providers -> Bool in
for provider in providers
{

Могу ли я добавить только это .onDrop при условии. Просто чтобы показать пример, который, безусловно, не работает:

if (condition)
{
.onDrop(of: [“public.file-url”], isTargeted: $userData.shopPopOver) { providers -> Bool in

Заранее спасибо!

1 Ответ

3 голосов
/ 07 апреля 2020

Вот пользовательский модификатор, который можно использовать для описанного варианта использования

struct Droppable: ViewModifier {
    let condition: Bool
    let types: [String]
    let tracking: Binding<Bool>?
    let action: ([NSItemProvider]) -> Bool

    @ViewBuilder
    func body(content: Content) -> some View {
        if condition {
            content.onDrop(of: types, isTargeted: tracking, perform: action)
        } else {
            content
        }
    }
}

extension View {
    public func acceptDrop(if condition: Bool, of supportedTypes: [String], isTargeted: Binding<Bool>?, perform action: @escaping ([NSItemProvider]) -> Bool) -> some View {
        self.modifier(Droppable(condition: condition, types: supportedTypes, tracking: isTargeted, action: action))
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...