当我将行从NSTableView拖到另一个NSOutlineView时,NSOutlineView会显示黄色的突出显示边框。如何避免这种情况?

确切地说,只有当我将表格中的行拖到NSTableView的空闲空间(即不在任何项目中)时,才会发生这种情况。但是,当我直接在NSOutlineView中的项目上拖动行时,不会显示黄色边框,但是(当然)项目是自己选择的。

NSOutlineViews数据源中outlineView:validateDrop:proposedItem:proposedChildIndex:的重要部分如下所示:

- (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建议不要放置任何特定项(导致看到的是整个边框突出显示),它将传入nil的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;
}

关于objective-c - NSOutlineView:热门以避免拖动项目时出现黄色边框?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3439352/

10-09 16:32
查看更多