2009-05-04 57 views
12

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

我该怎么做呢?目前的tableview的由阵列控制器(从一个NSMutableArray的获取其数据)

我发现this文档获取其数据,但似乎无法使它工作..

我..

  • 提出了“TableCon”类(我改变从NSTableView的,不是NSObject的继承)
  • 改变了NSTableView的类TableCon
  • 的NSTableView的的委托出口设置为该类
  • 在TableCon的init
  • 实施- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender;(再次TableCon)

..但是,什么叫registerForDraggedTypes,它就像我从来没有改变任何东西(没有错误),我究竟做错了什么?

编辑:我已经试过落实波阿斯Stuller的建议,同时也找到了解决的this描述(first reply包括解决第一篇文章)。所以我现在做的是..

  • 子类NSArrayController的,哪些资讯内容表视图(TableListCon)
  • 添加tableView出口TableListCon(并指出其在NSTableView的)
  • 实施validateDrop,writeRowsWithIndexes ,并接受TableListContent中的Drop
  • 在tableView插座上调用registerForDraggedTypes。

同样,没有错误/警告,但只有awakeFromNib方法好像是叫(其他方法都不是所谓的)

+2

这些是数据源方法。您需要将表视图的dataSource出口挂接到实现这些方法的类,以便调用它们。 – 2009-05-05 01:39:31

+1

Ohhhhh,这就是我做错了!通过“数据源”我假设它意味着阵列控制器!现在所有的工作都很完美,您能否将这些信息添加到您的答案中,以便我可以接受它?谢谢波阿斯! – dbr 2009-05-05 02:00:32

回答

21

NSTableView的来自通用视图处理拖放和拖放不同,这是整体一件好事。这意味着您不必手动处理表格所需的复杂突出显示,单元格跟踪和插入行为。

需要什么的描述可以找到here。基本上,您仍然调用-registerDraggedTypes :(通常在您的-awakeFromNib方法中),而不是实现NSDraggingDestination方法,而是实现与拖放相关的各种数据源方法,可以在here找到。你不应该需要继承NSTableView来实现这种拖放方式。

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

1

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