2010-08-09 27 views
1

Lorsque je fais glisser des lignes d'une NSTableView vers une autre NSOutlineView, NSOutlineView obtient une bordure de mise en évidence jaune. Comment puis-je éviter cela?NSOutlineView: Hot pour éviter la bordure jaune lors du déplacement d'éléments?

Pour être précis, cela se produit uniquement si je fais glisser les lignes de la table dans l'espace libre (c'est-à-dire sur aucun élément) de NSTableView. Toutefois, lorsque je fais glisser les lignes directement sur les éléments dans NSOutlineView, la bordure jaune n'apparaît pas, mais (bien sûr) les éléments sont sélectionnés eux-mêmes.

La partie importante de outlineView:validateDrop:proposedItem:proposedChildIndex: dans la source de données NSOutlineViews ressemble à ceci:

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

Merci pour toute aide!

+0

La bordure de couleur de sélection apparaît pour indiquer que la suppression est valide; c'est-à-dire que l'utilisateur peut laisser tomber ici, et le ou les éléments glissés vont effectivement tomber, et ne pas revenir en arrière. C'est une fonctionnalité, et je ne comprends pas pourquoi vous voulez le bloquer. –

+0

@Peter Hosey - vous devriez passer à une réponse. Parfois, la réponse à «comment faire ça» est «ne fais pas ça». – TechZen

Répondre

3

Lorsque NSOutlineView propose une goutte sur aucun élément particulier (résultant dans l'ensemble-frontière, vous voyez mettant en lumière), il passera dans un item de néant et un proposedChildIndex de NSOutlineViewDropOnItemIndex. Vous pouvez le tester pour savoir quand NSOutlineView propose cette baisse et renvoyer NSDragOperationNone pour ne pas autoriser de baisse du tout sur cette région.

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