Plusieurs NSTextFields dans NSTableCellView ;seul le premier peut être modifié directement
-
21-12-2019 - |
Question
J'ai plusieurs NSTextFields dans mon NSTableCellView :
Avec un double-clic, j'appelle [self.outlineView editColumn:0 row:clickedRow withEvent:nil select: YES];
qui fonctionne en activant l'édition dans le premier champ de texte.J'ai également configuré nextKeyViews dans IB afin que l'utilisateur puisse appuyer sur la touche Tab pour parcourir tous les champs.Mais lorsque j'essaie de sélectionner les champs de texte directement en appuyant sur la touche de la souris, cela ne fonctionne jamais.Il sélectionne/désélectionne uniquement l'édition sur NSTableCellView, et ne modifie donc que le premier champ de texte à chaque fois.
Comment puis-je faire fonctionner cela afin de pouvoir sélectionner et modifier le champ correct ?
La solution
J'ai trouvé une solution :
- sous-classe NSTableView / NSOutlineView
- dans la sous-classe, remplacer
- (void) mouseDown:(NSEvent *)theEvent
Dans mouseDown :
NSPoint selfPoint = [self convertPoint:theEvent.locationInWindow fromView:nil];
NSInteger row = [self rowAtPoint:selfPoint];
if (row>=0) [(ContactInfoTableCellViewMac *)[self viewAtColumn:0 row:row makeIfNecessary:NO]
mouseDownForTextFields:theEvent];
Dans ContactInfoTableCellViewMac :
- (void) mouseDownForTextFields:(NSEvent *)theEvent {
if ((NSCommandKeyMask | NSShiftKeyMask) & [theEvent modifierFlags]) return;
NSPoint selfPoint = [self convertPoint:theEvent.locationInWindow fromView:nil];
for (NSView *subview in [self subviews])
if ([subview isKindOfClass:[NSTextField class]])
if (NSPointInRect(selfPoint, [subview frame]))
[[self window] makeFirstResponder:subview];
}
Référence complète : Répondre aux événements de la souris dans le champ de texte dans la vue tableau basée sur la vue