1

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

助けてくれてありがとう!

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 に答える