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
Répondre
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)
}
}
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
@ 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
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. –
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
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? –