在 Mac,将文件拖到我的 NSTableVIew?

On Mac, Drag file to my NSTableVIew?

我希望能够将(任何)文件拖到我的基于视图的 NSTableView 中,所以在委托中我有这样的设置:

class MyViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource, NSDraggingDestination
{
    @IBOutlet var tableView: NSTableView! // connected in storyboard.

    override func viewDidLoad()
    {
        super.viewDidLoad()
        tableView.registerForDraggedTypes([NSFilenamesPboardType])
        // …
    }

    func draggingEntered(sender: NSDraggingInfo) -> NSDragOperation
    {
        println("Drag entered.")
        return .Copy
    }

    func prepareForDragOperation(sender: NSDraggingInfo) -> Bool
    {
        return true
    }

    func draggingUpdated(sender: NSDraggingInfo) -> NSDragOperation
    {
        return .Copy
    }
    // ...
}

但我的程序只是拒绝对拖放做出反应。当我将文件从 Finder 拖到它并释放时,文件图标会飞回 Finder。我的代码中是否遗漏了什么?

更新:我添加了这个

func performDragOperation(sender: NSDraggingInfo) -> Bool
{
    return true
}

但还是不行。我应该在我的视图中而不是委托中实现它吗?该文档说“window 对象或其委托可以实现这些方法;”

如果您查看 Apple 在他们的 "Receiving Drag Operations" documentation 中放置的示例代码,他们放置的最后一个函数实现了:

- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender

您需要实现它,return“YES”表示拖动成功。

自答:

我偶然发现了 this question, and realized that there are methods that need implement in the datasource sector also; namely these。拖放功能现在可以使用了。