NSOutlineView放到子行无效

时间:2016-02-10 12:39:43

标签: objective-c cocoa nsoutlineview

我有一个显示项目列表的NSOutlineView,我想实现一种文件夹结构。文件夹可以包含任意数量的项目。

当用户创建一个空白文件夹时,我想创建一个小的删除区域,以便更清楚地了解如何获取文件夹中的项目。放置区域是文件夹的子项。与此类似:

basic structure

问题在于,当用户将项目拖放到其上时,我无法让NSOutlineView突出显示拖放区域。

这是我到目前为止所拥有的:

- (NSDragOperation)outlineView:(NSOutlineView *)outlineView
                  validateDrop:(id <NSDraggingInfo>)info
                  proposedItem:(id)item
            proposedChildIndex:(NSInteger)index
{
    // Drag within the outlineview
    if ([info draggingSource] == outlineView)
    {
        if (self.itemBeingDragged)
        {

            if ([item isKindOfClass:[MyFolder class]] ||
                [item isKindOfClass:[MyDropArea class]])
            {
                return NSDragOperationMove;
            }
            ... other statements (irrelevant here) ...
        }
    }
}

这应该不够吗? 我确实收到了拖延反馈。在落差区域上方或下方是蓝线,但这对我没有帮助。

想点什么?

2 个答案:

答案 0 :(得分:1)

Apple的DragAndDropOutlineView示例项目应该可以让您了解造成问题的原因:

enter image description here

请注意,其中两个复选框允许您准确切换此行为。浏览一下源代码,看看你是否可以解决他们没有做过的事情。我快速浏览了一下,但是如果没有更多的代码知识,我就无法得到答案(所以我并不是真的将这个作为答案发布,更多的是用图片发表评论!)。

答案 1 :(得分:0)

原来我的代码很好。问题是我的掉落区域有一个覆盖整个区域的图像视图,上面写着一个小图片:“放下这里的物品”。

看来图像视图被突出显示截获! 当我删除图像视图时,一切正常。 当我添加一个按钮并在那里设置图像而不是创建图像视图时,它可以正常工作。

因此图像视图似乎打破了响应者链。无论IB中的“拒绝第一响应者”设置如何,都会发生这种情况。

这是一个艰难的。让我永远找到那个。 希望这有助于任何人遇到这个问题!