osx - 在NSOutlineView的整行上,不能拖放

  显示原文与译文双语对照的内容

我有一个NSOutlineView实现了拖放,它的值通过绑定来填充。

所有的一切都适用于我想要的逻辑,这基本上是在 root 级别之间拖放的能力。 所以我只是想在你愿意的时候。

我的问题出现在我的NSOutlineView接受drops的位置上。 看来它只允许我落在最左边的那一行。 我不能在其他地方。 我的行是基于视图的,并且具有图像视图。

This one is working 这表明它工作正常

Here is it not working. 这是不工作的。

这是我的acceptDrop代码。


- (NSDragOperation)outlineView:(NSOutlineView *)ov validateDrop:(id <NSDraggingInfo> )info proposedItem:(id)item proposedChildIndex:(NSInteger)childIndex {

//Check to see what we are proposed to be dropping on
 NSTreeNode *targetNode = item;
//A target of"nil" means we are on the main root tree
 if (targetNode == nil) {
//If were dropping on the physical item lets say no
 if (childIndex == NSOutlineViewDropOnItemIndex) {
 return NSDragOperationNone;
 }
//otherwise we are in-between so lets return move.
 return NSDragOperationMove;
 } else {
 return NSDragOperationNone;
 }
}

这是否有可能与我的视图设置有关,而不是我的NSOutlineView代码?

更新:

无论我的游标在哪里,它都在最顶层,但是只有在最左边的所有行上。

时间: 作者:

这个修好了。


NSUInteger maxNumberOfRows = [[_hostController arrangedObjects] count];
//Check to see what we are proposed to be dropping on
NSTreeNode *targetNode = item;
//A target of"nil" means we are on the main root tree
if (targetNode == nil) {
//If were dropping on the physical item lets say no
 if (childIndex == NSOutlineViewDropOnItemIndex) {
 [ov setDropItem:nil dropChildIndex:maxNumberOfRows];
 return NSDragOperationMove;
 }
 [ov setDropItem:nil dropChildIndex:childIndex];
 return NSDragOperationMove;
} else {
//If its not a host we dont want to allow drop
 if (![self isHost:[item representedObject]]) {
 return NSDragOperationNone;
 }
 if (childIndex == NSOutlineViewDropOnItemIndex) {
 [ov setDropItem:nil dropChildIndex: [ov rowForItem:item]];
 return NSDragOperationMove;
 }
 return NSDragOperationNone;
}

作者:
...