我有一个NSTableView和NSOutlineView,两者都与他们的内容提供通过绑定,我想要有一些拖功能:

  • 拖行从表A 一排大纲B,在那里他们将会被复制成一个数据结构中的行轮廓B表示。

  • 拖行的大纲B 另一行中的大纲B,这将复制的数据代表的第一行为的数据表示在第二排。

我读过 苹果公司的拖放文件 并得到了只是没有出路的。它并不真的似乎适用于什么,我需要做。我是什么丢失?

有帮助吗?

解决方案

你需要一个数据源的—据我所知,你不能让这发生的绑定单独的。

未完成的Adium外加的创造者,这是在BSD许可证,包括 一系列控制器,你可以设定为数据源得到的拖放在一个绑定的驱动图表.

这一要求可能不适用于NSOutlineView和NSTreeController.我没有尝试过。

其他提示

你的网页相联系是很清楚什么你需要做的。在表一的数据来源,实施 registerForDraggedTypes:tableView:writeRowsWithIndexes:toPasteboard: 把一些私人的 TableAPasteboardType 数据上的剪贴板.

在大纲B的数据源,实现两个相同的方法,并把一些私人的 OutlineBPasteboardType 数据上的剪贴板.

最后,实现 tableView:validateDrop:proposedRow:proposedDropOperation:tableView:acceptDrop:row:dropOperation: 检查的纸板为 TableAPasteboardTypeOutlineBPasteboardType 并做出适当的修改,以你的能模式,同。

这是很简单的一旦你只是犁在做到这一点。

在mac os10.7一些新的议定书添加了实现这一点。

还有一个 缺少的文件编制表 在那一刻但你可以找到一些很好的例子:

为NSTableViwew的协议NSTableViewDataSource定义了以下方法:

  • (BOOL)tableView:writeRowsWithIndexes:toPasteboard:
  • tableView:validateDrop:proposedRow:proposedDropOperation:
  • tableView:acceptDrop:row:dropOperation:

为NSOutlineView的协议NSOutlineViewDataSource定义了以下方法:

  • (BOOL)outlineView:writeItems:toPasteboard:
  • (NSDragOperation)outlineView:validateDrop:proposedItem:proposedChildIndex:
  • (BOOL)outlineView:acceptDrop:item:childIndex:

这些都是最低要求,以实现对每个视的类型。利用情况颇为相似。

  1. 如果toPasteboard:方法返回是的,拖是开始。
  2. 该validateDrop:法控制其目标的节点是允许通过更新的标记在图
  3. 返回是对acceptDrop:方法如下降是成功的

这导致两个子-你有用例来管理。第一个是拖放在同样的观点,或者相同的操作之间的两个意见。此外,您可以区分之间的移动,复制或删除作业。一个很好的例子是如何断点的工作拖放在载。

这提供了一些额外的方法来定义拖拉,但那些我提到的关键方法来获得它的工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top