Swift Drag and Drop 不能在 Xcode 之外工作
Posted
技术标签:
【中文标题】Swift Drag and Drop 不能在 Xcode 之外工作【英文标题】:Swift Drag and Drop won't work outside Xcode 【发布时间】:2014-11-01 15:01:09 【问题描述】:我有一些代码,可以在命令行工具中使用。现在我想让它成为一个 Drop-Applet 来通过终端和路径。我将一些文件放到它上面,只要附加了调试器,它就可以像魅力一样工作。
到目前为止一切顺利,但是当我直接启动它(从 Xcode 输出目录)时,似乎不接受拖放。 (动画文件回原点)。
class dragView : NSView, NSDraggingDestination
required init(coder: NSCoder)
super.init(coder: coder)
override init(frame: NSRect)
super.init(frame: frame)
let types = [NSFilenamesPboardType, NSURLPboardType]
registerForDraggedTypes(types)
override func drawRect(dirtyRect: NSRect)
super.drawRect(dirtyRect)
NSColor.whiteColor().set()
NSRectFill(dirtyRect)
override func draggingEntered(sender: NSDraggingInfo!) -> NSDragOperation
return NSDragOperation.Copy
override func draggingUpdated(sender: NSDraggingInfo!) -> NSDragOperation
return NSDragOperation.Copy
override func performDragOperation(sender: NSDraggingInfo!) -> Bool
let pboard: NSPasteboard = sender.draggingPasteboard()
let array : [String] = pboard.propertyListForType(String(NSFilenamesPboardType)) as [String]
for item in array
...
我在这里错过了什么?
【问题讨论】:
【参考方案1】:您的代码不起作用,因为您必须将拖动类型注册到 init(coder:) 函数中。 这段代码在 Swift 3 中运行良好
import Cocoa
class DropView : NSView
required init?(coder: NSCoder)
super.init(coder: coder)
let types = [NSFilenamesPboardType, NSURLPboardType]
register(forDraggedTypes: types)
self.wantsLayer = true
self.layer?.backgroundColor = NSColor.white.cgColor
override func draw(_ dirtyRect: NSRect)
super.draw(dirtyRect)
// Drawing code here.
override func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation
return .copy
override func performDragOperation(_ sender: NSDraggingInfo) -> Bool
guard let pasteboard = sender.draggingPasteboard().propertyList(forType: "NSFilenamesPboardType") as? NSArray,
let path = pasteboard[0] as? String
else return false
//GET YOUR FILE PATH !!
Swift.print("FilePath: \(path)")
return true
一个更有用的例子here
【讨论】:
以上是关于Swift Drag and Drop 不能在 Xcode 之外工作的主要内容,如果未能解决你的问题,请参考以下文章
angular-drag-and-drop-lists 拖动的元素消失(chrome)
PYQT5 (十八)文件拖放(drag and drop)并获取文件信息
python selenium drag_and_drop()和drag_and_drop_with_offset()怎么使用?