NSOutlineView: горячая, чтобы избежать желтой границы при перетаскивании объектов? - PullRequest
1 голос
/ 09 августа 2010

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

3 голосов
/ 09 августа 2010

Когда 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;
}
...