NSOutlineView:热拖动项目时避免黄色边框?
问题描述:
当我从NSTableView拖动行到另一个NSOutlineView时,NSOutlineView会得到一个黄色突出显示的边框。我如何避免这种情况?NSOutlineView:热拖动项目时避免黄色边框?
准确地说,只有当我将表格中的行拖入NSTableView的可用空间(即不在任何项目中)时才会发生这种情况。但是,当我直接在NSOutlineView中的项目上拖动行时,黄色边框不会显示出来,但是(当然)这些项目会自己选择。
的outlineView:validateDrop:proposedItem:proposedChildIndex:
在NSOutlineViews'数据源中的重要组成部分,是这样的:
- (NSDragOperation)outlineView:(NSOutlineView *)outlineView
validateDrop:(id <NSDraggingInfo>)info
proposedItem:(id)item
proposedChildIndex:(NSInteger)index
{
if ([info draggingSource] == myOtherTableView) {
[outlineView setDropItem:item
dropChildIndex:NSOutlineViewDropOnItemIndex];
return NSDragOperationMove;
}
return NSDragOperationNone;
}
感谢您的帮助!
答
当NSOutlineView
没有提出任何具体项目(导致整个边界突出你看到)的下降,它会通过在零的item
和NSOutlineViewDropOnItemIndex的proposedChildIndex
。您可以测试此信息,以确定NSOutlineView
何时提出此下降,并返回NSDragOperationNone
,以便在该区域完全不允许下降。
- (NSDragOperation)outlineView:(NSOutlineView *)outlineView
validateDrop:(id <NSDraggingInfo>)info
proposedItem:(id)item
proposedChildIndex:(NSInteger)index
{
if ([info draggingSource] == myOtherTableView) {
if (item == nil)
return NSDragOperationNone;
else
{
[outlineView setDropItem:item
dropChildIndex:NSOutlineViewDropOnItemIndex];
return NSDragOperationMove;
}
}
return NSDragOperationNone;
}
选择颜色边框似乎表示该放置有效;即用户可以在这里下降,并且拖动的项目将实际下降,而不是回缩。这是一个功能,我不明白你为什么要阻止它。 – 2010-08-09 11:42:03
@彼得霍西 - 你应该将其移至答案。有时候,“我该如何做”的答案是“不要那样做”。 – TechZen 2010-08-09 12:17:55