2010-08-17 5 views
1

J'ai un NSTableView placé au-dessus de NSView. Je veux désélectionner NSTableView lorsque le pointeur de la souris est cliqué sur NSView. Comment y parvenir?Désélection de NSTableView lorsque vous cliquez dessus quelque part en dehors de la table

+0

Que voulez-vous dire « au-dessus de »? Normalement, vous ne devriez pas placer une vue au-dessus de l'un de ses frères et sœurs dans la hiérarchie des vues; vous devriez seulement mettre des vues * dans * d'autres vues. En d'autres termes, deux points de vue frères et sœurs ne doivent pas se chevaucher; vous devriez faire une sous-vue de l'autre. –

+0

C'est correct. L'un est une sous-vue de l'autre. Mais comment puis-je réaliser la fonctionnalité de la suppression de la table? – Subrat

+0

Que voulez-vous dire par "désélectionner la vue de la table"? Révoquer son statut de premier répondeur ou désélectionner les lignes sélectionnées dans celui-ci? –

Répondre

6

je sais que c'est vieux, mais une option est de sous-classe NSTableView et passer outre son mouseDown:

- (void)mouseDown:(NSEvent *)event { 

    [super mouseDown:event]; 

    NSPoint point = [self convertPoint:[event locationInWindow] fromView:nil]; 
    NSInteger row = [self rowAtPoint:point]; 

    if (row == -1) { // We didn't click any row 

     [self deselectAll:nil]; 
    } 
} 

Swift 3 Version:

override open func mouseDown(with event: NSEvent) { 
    super.mouseDown(with: event) 

    let point = convert(event.locationInWindow, from: nil) 
    let rowIndex = row(at: point) 

    if rowIndex < 0 { // We didn't click any row 
     deselectAll(nil) 
    } 
} 
+0

Je crois qu'il est déconseillé d'appeler la superclasse pour gérer l'événement mouseDown: puisque vous semblez gérer l'événement vous-même complètement. – Fnord23

+0

@ Fnord23 Non, super doit toujours s'occuper de la sélection des lignes sur 'mouseDown', celui-ci ne s'occupe que de la désélection. – hnh

Questions connexes