1

当我将行从 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;
}

谢谢你的帮助!

4

1 回答 1

3

NSOutlineView建议不放在任何特定项目上时(导致您看到的整个边框突出显示),它将传入一个itemnil 和一个proposedChildIndexNSOutlineViewDropOnItemIndex。您可以对此进行测试以判断何时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-09T15:21:39.317 回答