Pregunta

Tengo varios NSTextFields en mi NSTableCellView:enter image description here

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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top