我有一个显示项目列表的NSOutlineView,我想实现一种文件夹结构。文件夹可以包含任意数量的项目。
当用户创建一个空白文件夹时,我想创建一个小的删除区域,以便更清楚地了解如何获取文件夹中的项目。放置区域是文件夹的子项。与此类似:
问题在于,当用户将项目拖放到其上时,我无法让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) ...
}
}
}
这应该不够吗? 我确实收到了拖延反馈。在落差区域上方或下方是蓝线,但这对我没有帮助。
想点什么?
答案 0 :(得分:1)
Apple的DragAndDropOutlineView示例项目应该可以让您了解造成问题的原因:
请注意,其中两个复选框允许您准确切换此行为。浏览一下源代码,看看你是否可以解决他们没有做过的事情。我快速浏览了一下,但是如果没有更多的代码知识,我就无法得到答案(所以我并不是真的将这个作为答案发布,更多的是用图片发表评论!)。
答案 1 :(得分:0)
原来我的代码很好。问题是我的掉落区域有一个覆盖整个区域的图像视图,上面写着一个小图片:“放下这里的物品”。
看来图像视图被突出显示截获! 当我删除图像视图时,一切正常。 当我添加一个按钮并在那里设置图像而不是创建图像视图时,它可以正常工作。
因此图像视图似乎打破了响应者链。无论IB中的“拒绝第一响应者”设置如何,都会发生这种情况。
这是一个艰难的。让我永远找到那个。 希望这有助于任何人遇到这个问题!