Comment consommer l'événement «Edit» pour NStableView
-
14-11-2019 - |
Question
À l'intérieur d'un nstableViewDelegate, j'utilise une fenêtre de feuille pour commencer une opération d'édition comme ceci:
- (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {
editEntity = [[contractsAC selectedObjects] objectAtIndex:0];
needsWriteToArrayController = FALSE;
[self beginSheet];
return NO;
}
- (void) beginSheet {
[NSApp beginSheet:contractEditWindow
modalForWindow:mainWindow
modalDelegate:nil
didEndSelector:NULL
contextInfo:nil
];
}
Si je double-cliquez sur une cellule de table, les choses se comportent comme prévu: la feuille apparaît et je suis en mesure de modifier ses entrées.
Si une cellule de table est sélectionnée et que j'appuie sur la touche de retour, les choses ont tendance à être câblées: la feuille apparaît, mais l'événement de la clé de retour est transmis à la feuille. À son tour, le bouton Enregistrer par défaut de la feuille est tiré - et fait disparaître la feuille. Dommage, aucune chance de modifier ;-)
Dois-je consommer l'événement clé actuel à l'intérieur de la méthode fundittableColumn: Méthode? Si oui, comment pourrais-je?
La solution
Vous pouvez essayer de reporter la présentation des feuilles avec -performSelector:withObject:afterDelay:
. Ajouter une méthode privée qui configure et présente la feuille, et lui donner un retard de 0.0
. Il sera programmé légèrement plus tard sur la boucle de course, donnant à la pression de la touche une chance de se propager.