Cómo consumir el evento 'editar' para NSTableView
-
14-11-2019 - |
Pregunta
Dentro de NStableViewDelegate, uso una ventana de hoja para comenzar una operación de edición como esta:
- (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 hago doble clic en una celda de la tabla, todo se comporta como se esperaba:Aparece la hoja y puedo editar sus entradas.
Si se selecciona una celda de la tabla y presiono la tecla de retorno, las cosas tienden a estar conectadas:La hoja aparece, pero el evento de la clave de retorno se reenvía a la hoja.A su vez, el botón GUARDAR predeterminado de la hoja se activa y hace que la hoja desaparezca.Lástima, no hay posibilidad de editar ;-)
¿Debo consumir el evento clave actual dentro de shouldEditTableColumn:¿método?Si es así, ¿cómo podría?
Solución
Podrías intentar aplazar la presentación de la hoja con -performSelector:withObject:afterDelay:
.Agregue un método privado que configure y presente la hoja, y déle un retraso de 0.0
.Se programará un poco más tarde en el ciclo de ejecución, lo que le dará a la pulsación de tecla la oportunidad de propagarse.