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; 
} 

感谢您的帮助!

+0

选择颜色边框似乎表示该放置有效;即用户可以在这里下降,并且拖动的项目将实际下降,而不是回缩。这是一个功能,我不明白你为什么要阻止它。 – 2010-08-09 11:42:03

+0

@彼得霍西 - 你应该将其移至答案。有时候,“我该如何做”的答案是“不要那样做”。 – TechZen 2010-08-09 12:17:55

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; 
}