NSTableView和NSOutlineView拖拽
-
19-08-2019 - |
题
我有一个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:
检查的纸板为 TableAPasteboardType
或 OutlineBPasteboardType
并做出适当的修改,以你的能模式,同。
这是很简单的一旦你只是犁在做到这一点。
在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:
这些都是最低要求,以实现对每个视的类型。利用情况颇为相似。
- 如果toPasteboard:方法返回是的,拖是开始。
- 该validateDrop:法控制其目标的节点是允许通过更新的标记在图
- 返回是对acceptDrop:方法如下降是成功的
这导致两个子-你有用例来管理。第一个是拖放在同样的观点,或者相同的操作之间的两个意见。此外,您可以区分之间的移动,复制或删除作业。一个很好的例子是如何断点的工作拖放在载。
这提供了一些额外的方法来定义拖拉,但那些我提到的关键方法来获得它的工作。