NSOutlineView: горячая, чтобы избежать желтой границы при перетаскивании объектов?

Когда я перетаскиваю строки из NSTableView в другой 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;
}

Спасибо за любую помощь!

1 ответ

Когда NSOutlineView предлагает сделать опускание не для какого-либо конкретного элемента (что приводит к выделению всей границы, которое вы видите), оно передается в виде item ноль и proposedChildIndex NSOutlineViewDropOnItemIndex. Вы можете проверить это, чтобы сказать, когда 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;
}
Другие вопросы по тегам