Múltiples NSTextFields en NSTableCellView;Sólo el primero se puede editar directamente.
-
21-12-2019 - |
Pregunta
Tengo varios NSTextFields en mi NSTableCellView:
Con una acción de doble clic, llamo [self.outlineView editColumn:0 row:clickedRow withEvent:nil select: YES];
que funciona para activar la edición en el primer campo de texto.También configuré nextKeyViews en IB para que el usuario pueda presionar la tecla Tab para desplazarse por todos los campos.Pero cuando intento seleccionar los campos de texto directamente presionando la tecla del mouse, nunca funciona.Solo selecciona/deselecciona la edición en NSTableCellView y, por lo tanto, solo edita el primer campo de texto cada vez.
¿Cómo puedo hacer que esto funcione para poder seleccionar y editar el campo correcto?
Solución
Encontré una solución:
- subclase NSTableView / NSOutlineView
- en subclase, anular
- (void) mouseDown:(NSEvent *)theEvent
En 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];
En 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];
}
Referencia completa: Responder a eventos del mouse en el campo de texto en la vista de tabla basada en vistas