使用拖放获取文件路径(Swift macOS)? [英] Get file path using drag and drop (Swift macOS)?
本文介绍了使用拖放获取文件路径(Swift macOS)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何在Swift 2.0中实现拖放区?
how to implement a drag-and-drop zone in swift 2.0?
我构建了一个处理kext文件的应用程序,但现在,我必须手动输入输入kext的路径. 我的问题是:如何通过在区域上执行拖放操作来获取文件路径?
I built an app that processes kext files but, for now, i have to manually enter the path to the input kext. my question is: how to get file path by performing a drag and drop on a zone?
推荐答案
[更新至Swift 4.0和Xcode 9]
[Update to Swift 4.0 and Xcode 9]
灵感来自实现拖放Swift中的区域
将NSView添加到您的主视图和子类中. 该代码在Swift 4.0和macOS 10.13 High Sierra中完美地工作!
Add a NSView to your main view and subclass. This code works perfect in Swift 4.0 and macOS 10.13 High Sierra!
import Cocoa
class DropView: NSView {
var filePath: String?
let expectedExt = ["kext"] //file extensions allowed for Drag&Drop (example: "jpg","png","docx", etc..)
required init?(coder: NSCoder) {
super.init(coder: coder)
self.wantsLayer = true
self.layer?.backgroundColor = NSColor.gray.cgColor
registerForDraggedTypes([NSPasteboard.PasteboardType.URL, NSPasteboard.PasteboardType.fileURL])
}
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
// Drawing code here.
}
override func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation {
if checkExtension(sender) == true {
self.layer?.backgroundColor = NSColor.blue.cgColor
return .copy
} else {
return NSDragOperation()
}
}
fileprivate func checkExtension(_ drag: NSDraggingInfo) -> Bool {
guard let board = drag.draggingPasteboard().propertyList(forType: NSPasteboard.PasteboardType(rawValue: "NSFilenamesPboardType")) as? NSArray,
let path = board[0] as? String
else { return false }
let suffix = URL(fileURLWithPath: path).pathExtension
for ext in self.expectedExt {
if ext.lowercased() == suffix {
return true
}
}
return false
}
override func draggingExited(_ sender: NSDraggingInfo?) {
self.layer?.backgroundColor = NSColor.gray.cgColor
}
override func draggingEnded(_ sender: NSDraggingInfo) {
self.layer?.backgroundColor = NSColor.gray.cgColor
}
override func performDragOperation(_ sender: NSDraggingInfo) -> Bool {
guard let pasteboard = sender.draggingPasteboard().propertyList(forType: NSPasteboard.PasteboardType(rawValue: "NSFilenamesPboardType")) as? NSArray,
let path = pasteboard[0] as? String
else { return false }
//GET YOUR FILE PATH !!!
self.filePath = path
Swift.print("FilePath: \(path)")
return true
}
}
要使用此代码,必须将"macOS部署目标"设置为10.13
To use this code you have to set "macOS Deployment Target" to 10.13
这篇关于使用拖放获取文件路径(Swift macOS)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文