Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将文件拖放到NSTableView上?_Objective C_Cocoa_Drag And Drop - Fatal编程技术网

Objective c 将文件拖放到NSTableView上?

Objective c 将文件拖放到NSTableView上?,objective-c,cocoa,drag-and-drop,Objective C,Cocoa,Drag And Drop,我有一个NSTableView,我希望允许用户在上面拖放视频文件。当他们删除文件时,它将作为一行添加到表视图中 我该怎么做呢?当前tableview的从阵列控制器获取数据(从NSMutableArray获取数据) 我找到了文档,但似乎无法使其正常工作 我有 创建了一个“TableCon”类(我将其更改为从NSTableView继承,而不是从NSObject继承) 将NSTableView类更改为TableCon 将NSTableView的委托出口设置为该类 在TableCon的init中调用了

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

我该怎么做呢?当前tableview的从阵列控制器获取数据(从NSMutableArray获取数据)

我找到了文档,但似乎无法使其正常工作

我有

  • 创建了一个“TableCon”类(我将其更改为从NSTableView继承,而不是从NSObject继承)
  • 将NSTableView类更改为TableCon
  • 将NSTableView的委托出口设置为该类
  • 在TableCon的init中调用了
    RegisterForDragedTypes
  • 实现的
    -(nsdragooperation)draggingented:(id)发送方(同样在TableCon中)
…但是,没什么,好像我从未改变过任何事情(没有错误),我做错了什么

编辑:我尝试了执行Boaz Stuler的建议,还找到了解决方案的描述(包括第一篇文章中的解决方案)。所以我现在做的是

  • 子类NSArrayController,将内容提供给表视图(TableListCon)
  • tableView
    outlet添加到TableListCon(并将其指向NSTableView)
  • 在TableListCon中实现validateDrop、WriteRowWithIndexes和acceptDrop
  • 在tableView出口上调用RegisterForDragedTypes

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

NSTableView处理拖放的方式与常规视图不同,这总体上是一件好事。这意味着您不必手动处理表格所需的复杂高亮显示、单元格跟踪和插入行为

可以找到所需内容的说明。基本上,您仍然可以调用-registerDraggedTypes:(通常在-awakeFromNib方法中),但是您没有实现NSDraggingDestination方法,而是实现与拖放相关联的各种数据源方法,可以找到这些方法。您不需要子类NSTableView来以这种方式实现拖放


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

除了Boaz所说的,听起来您正在创建一个NSTableView子类,然后将该子类的一个实例作为NSTableView的委托。如果您要创建子类,那么应该使用该子类来代替NSTableView,而不是它的补充。此外,将视图作为另一个对象的委托几乎总是违反关注点。

这些都是数据源方法。您需要将表视图的数据源出口挂接到实现这些方法的类,以便调用它们!“数据源”指的是阵列控制器!现在一切都很好,你能把这些信息添加到你的答案中,这样我就可以接受了吗?谢谢波阿斯!不幸的是,你的第一个链接现在似乎已经死了。我不确定替代品是什么。