Question

J'ai plusieurs NSTextFields dans mon NSTableCellView :enter image description here

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 ?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top