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

Posted

技术标签:

【中文标题】在 Mac 上,将文件拖到我的 NSTableVIew?【英文标题】:On Mac, Drag file to my NSTableVIew? 【发布时间】:2015-07-04 13:34:00 【问题描述】:

我希望能够将(任何)文件拖到基于视图的 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

但它仍然不起作用。我应该在我的视图中而不是委托中实现它吗?文档说“窗口对象或其委托都可以实现这些方法;”

【问题讨论】:

看看this example。 【参考方案1】:

自我回答:

我偶然发现了this question,并意识到在数据源扇区中也有需要实现的方法;即these。拖放功能现在可以使用了。

【讨论】:

你能发布你的最终解决方案吗?【参考方案2】:

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

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

您需要实现它并返回“YES”以指示拖动成功。

【讨论】:

谢谢。我添加了它,它仍然不起作用。请在问题中查看我的更新。

以上是关于在 Mac 上,将文件拖到我的 NSTableVIew?的主要内容,如果未能解决你的问题,请参考以下文章

无法将文件拖到解决方案资源管理器

无法将文件拖到解决方案资源管理器

奇怪的行为:从堆栈拖动到状态项不起作用

将 Mac App 窗口中的“功能”拖到 Dock 上

将多个文件拖到沙盒应用程序

如何部署ad-hoc分发(ipa文件)或如何将iTunes与设备同步