gpt4 book ai didi

xcode - Swift 拖放在 Xcode 之外不起作用

转载 作者:可可西里 更新时间:2023-10-31 23:45:33 25 4
gpt4 key购买 nike

我有一些代码,可以在命令行工具中运行。现在我想让它成为一个通过终端和路径获取的 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
{
...

我在这里错过了什么?

最佳答案

您的代码不起作用,因为您必须将拖动类型注册到 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

关于xcode - Swift 拖放在 Xcode 之外不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25723463/

25 4 0