将文件拖放到NSTableView上?

dbr*_*dbr 12 cocoa drag-and-drop objective-c

我有一个NSTableView我希望允许用户将视频文件拖放到.当他们删除文件时,它将在表视图中添加为一行.

我该怎么做呢?目前tableview的数据来自一个数组控制器(从NSMutableArray获取数据)

我找到了这个文档,但似乎无法使它工作..

我有..

  • 制作了一个"TableCon"类(我改为继承自NSTableView,而不是NSObject)
  • 将NSTableView类更改为TableCon
  • 将NSTableView的委托出口设置为该类
  • registerForDraggedTypes在TableCon的init中调用
  • 实现- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender;(再次在TableCon中)

但是,没什么,它的行为就像我从未改变过任何事情(没有错误),我做错了什么?

编辑:我已经试过落实波阿斯Stuller的建议,同时也发现了这个解决方案的描述(第一个答复包括解决第一篇文章).所以我现在所做的就是......

  • 子类NSArrayController,它将内容提供给表视图(TableListCon)
  • 添加tableView插件到TableListCon(并指向NSTableView)
  • 在TableListCon中实现validateDrop,writeRowsWithIndexes和acceptDrop
  • 在tableView出口上调用registerForDraggedTypes.

同样,没有错误/警告,但似乎只调用了awakeFromNib方法(没有调用其他方法)

Boa*_*ler 21

NSTableView处理拖放操作的方式与通用视图不同,这总体上是一件好事.这意味着您不必手动处理复杂的突出显示,单元格跟踪和表格所需的插入行为.

可在此处找到所需内容的说明.基本上,你还是叫-registerDraggedTypes:(一般在-awakeFromNib方法),但不是执行NSDraggingDestination方法,要实现拖放相关联的各种数据源的方法,它可以找到这里.您不需要将NSTableView子类化为以这种方式实现拖放.

请注意那些是数据源方法.您需要将表视图的dataSource出口挂钩到实现这些方法的类,以便调用它们.