Cocoa NSTableView和NSOutlineView拖放
我有一个NSTableView和一个NSOutlineView,它们的内容都是由绑定提供的,我希望有一些拖放功能:Cocoa NSTableView和NSOutlineView拖放,cocoa,drag-and-drop,cocoa-bindings,nstableview,nsoutlineview,Cocoa,Drag And Drop,Cocoa Bindings,Nstableview,Nsoutlineview,我有一个NSTableView和一个NSOutlineView,它们的内容都是由绑定提供的,我希望有一些拖放功能: 将表A中的行拖到大纲B的一行上,它们将被复制到大纲B中的行所表示的数据结构中 将一行从大纲B拖到大纲B中的另一行上,这将把第一行表示的数据复制到第二行表示的数据中 我读过书,但几乎一无所获。这似乎并不适用于我需要做的事情。我遗漏了什么?您链接到的页面非常清楚您需要做什么。在表A的数据源中,实现RegisterForDragedTypes:和tableView:WriterRow
- 将表A中的行拖到大纲B的一行上,它们将被复制到大纲B中的行所表示的数据结构中
- 将一行从大纲B拖到大纲B中的另一行上,这将把第一行表示的数据复制到第二行表示的数据中
我读过书,但几乎一无所获。这似乎并不适用于我需要做的事情。我遗漏了什么?您链接到的页面非常清楚您需要做什么。在表A的数据源中,实现
RegisterForDragedTypes:
和tableView:WriterRowWithIndexes:toPasteboard:
以将一些私有TableAPasteboardType
数据放在粘贴板上
在outline B的数据源中,实现相同的两种方法,并在粘贴板上放置一些私有的outline粘贴板类型
数据
最后,实现tableView:validateDrop:proposedRow:proposedDropOperation:
和tableView:acceptDrop:row:dropOperation:
以检查粘贴板是否存在tablePasteBoardType
或OutlinePasteBoardType
,并根据具体情况对绑定模型进行适当更改
一旦你投入并完成它,它就相当简单了。你需要一个数据源,单靠绑定是无法做到的 未完成的Adium Xtras创建者,在BSD许可下,包括
此要求可能不适用于NSOutlineView和NSTreeController。我还没有尝试过。在MacOS 10.7中,添加了一些新的协议来实现这一点 目前有一个很好的例子,但你可以找到一些很好的例子:
(BOOL)tableView:writeRowsWithIndexes:toPasteboard:
tableView:validateDrop:proposedRow:proposedDropOperation:
tableView:acceptDrop:row:dropOperation:
(BOOL)大纲视图:writeItems:toPasteboard:
(nsdragooperation)大纲视图:validateDrop:proposedItem:proposedChildIndex:
(BOOL)大纲视图:acceptDrop:item:childIndex:
tableView有一些额外的自定义拖放的方法,但我提到的那些方法是使其工作的关键方法。该链接以404结尾,我在任何地方都找不到原始代码。这是一种完美的逻辑和干净的方法。谢谢你重新链接。