问题描述
你好,我已经在我的应用程序中实现了多个拖放区域,到目前为止,一切正常,因为我只需要拖放各种类型的文件。
现在我有一个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 (将#修改为@)