SwiftUI OnDrop 函数取决于条件

标签 swift macos swiftui

我们在 SwiftUI 中为 MacOS 应用程序使用 OnDrop() 函数。它真的很棒。 但是,我只想在特殊情况下允许 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

提前致谢!

最佳答案

这是可用于描述的用例的自定义修饰符

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))
    }
}

关于SwiftUI OnDrop 函数取决于条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61081111/

相关文章:

google-cloud-firestore - 如何在 SwiftUI 中的 firebase 查询期间显示加载动画

ios - Swift App 在模拟器上打开但在设备上不打开

python - 无法使用自制软件 python 在 OSX 10.10 上安装任何需要 C 编译的东西

python - 安装 opencv python mac osx 10.11?

macos - 如果我使用证书对其进行签名并在 Mac 商店之外分发,我的应用程序会停止工作吗?

ios - 带有 .Vertical axis going below keyboard 的多行文本字段

SwiftUI 问题 : Place text underneath(outside) of list view

ios - 在 Swift 中将其分配给变量之前等待网络请求的结果

swift - 有没有办法延迟 Swift 中的 return 语句?

ios - JSON 解码失败