在 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?的主要内容,如果未能解决你的问题,请参考以下文章