如何解决如何在拖放区域中接受目录?
你好,我已经在我的应用程序中实现了多个拖放区域,到目前为止,一切正常,因为我只需要拖放各种类型的文件。
现在我有一个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 举报,一经查实,本站将立刻删除。