如何在拖放区域中接受目录?

问题描述

你好,我已经在我的应用程序中实现了多个拖放区域,到目前为止,一切正常,因为我只需要拖放各种类型的文件

现在我有一个NSView,我只需要删除文件夹。我从一个教程中获得了代码,其中解释了如何过滤类型,但是我不知道如何将文件添加到可接受的类型。


//MARK: - DROP AREA CLASS

// Invisible area needed to drop files
class FolderDropArea: NSView {

    let viewmodel = viewmodel()

    // declare the supported files that can be dropped in
    let supportedTypes: [NSPasteboard.PasteboardType] = [ .fileURL,.sound,]

    let fileManager = FileManager.default

    override func awakeFromNib() {
        super.awakeFromNib()

        //registerd to be a drag zone
        self.registerForDraggedTypes(supportedTypes)

        // Enable layer in self view.
        self.wantsLayer = true

        self.layer?.cornerRadius = 0.0
        self.layer?.borderWidth = 1.0
        self.layer?.borderColor = CGColor(red: 0,green: 0,blue: 0,alpha: 0)

    }

    //MARK: - DRAG IN OPERATIONS

    // detects the if the type dragged is accepted
    override func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation {

        let canReadPasteboardobjects = sender.draggingPasteboard.canReadobject(forClasses: [NSImage.self,NSColor.self,Nsstring.self,NSURL.self,NSSound.self],options: acceptableuTITypes())

        print("Draggin entered")

        if canReadPasteboardobjects {
            highlight()
            return .copy
        }

        return NSDragOperation()
    }

    //MARK: - Operaiton at drop
    override func performDragOperation(_ sender: NSDraggingInfo) -> Bool {
        guard let pasteboardobjects = sender.draggingPasteboard.readobjects(forClasses: [NSImage.self,options: acceptableuTITypes()),pasteboardobjects.count > 0 else {
            return false
        }

        pasteboardobjects.forEach { (object) in
            if let url = object as? NSURL {
                self.handleFileURLObject(url as URL)
            }
        }
        return true
    }

    func acceptableuTITypes() -> [NSPasteboard.ReadingOptionKey : Any] {
        let types = [NSImage.imageTypes,Nsstring.readableTypeIdentifiersForItemProvider,NSSound.soundUnfilteredTypes].flatMap { $0 }
        return [NSPasteboard.ReadingOptionKey.urlReadingContentsConformToTypes : types]
    }
}

删除了所有无用的代码,只剩下了声明可接受类型的方式。我不知道如何接受文件夹。

编辑:当我在该区域中移动文件夹时,控制台将打印“拖动输入”,因为它是fileUrl类型,但是它没有调用突出显示功能,因此它不被视为可读对象

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...