我有NSTableView
我希望允许用户将视频文件拖放到其中。当他们删除文件时,它将在表视图中添加为一行。
我该怎么做呢?目前tableview的数据来自一个数组控制器(从NSMutableArray获取数据)
我找到了this文档,但似乎无法使其正常工作..
我有..
registerForDraggedTypes
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender;
(再次在TableCon中)..但是,没有,它表现得像我从未改变过任何事情(没有错误),我做错了什么?
修改:我已尝试实施Boaz Stuller的建议,并且还找到了this解决方案的说明(first reply包含第一篇文章的解决方案)。所以我现在所做的就是......
tableView
出口添加到TableListCon(并将其指向NSTableView)同样,没有错误/警告,但似乎只调用了awakeFromNib方法(没有调用其他方法)
答案 0 :(得分:21)
NSTableView处理拖放操作的方式与通用视图不同,这总体上是一件好事。这意味着您不必手动处理表所需的复杂突出显示,单元格跟踪和插入行为。
可以找到所需内容的说明here。基本上,您仍然调用-registerDraggedTypes :(通常在您的-awakeFromNib方法中),但不是实现NSDraggingDestination方法,而是实现与拖放相关联的各种数据源方法,可以找到here。您不需要将NSTableView子类化为以这种方式实现拖放。
请注意这些是数据源方法。您需要将表视图的dataSource出口挂钩到实现这些方法的类,以便调用它们。
答案 1 :(得分:1)
除了Boaz所说的,听起来你正在创建一个NSTableView子类,然后将该子类的实例作为NSTableView的委托。如果您要进行子类化,则应使用该子类代替NSTableView,而不是使用它。此外,将视图作为另一个对象的委托也几乎总是违反问题。