Pergunta

Tenho vários NSTextFields no meu NSTableCellView:enter image description here

Com uma ação de clique duplo, eu chamo [self.outlineView editColumn:0 row:clickedRow withEvent:nil select: YES]; que funciona ativando a edição no primeiro campo de texto.Também configurei nextKeyViews no IB para que o usuário possa pressionar a tecla Tab para percorrer todos os campos.Mas quando tento selecionar os campos de texto diretamente pressionando o botão do mouse, isso nunca funciona.Ele apenas seleciona/desmarca a edição no NSTableCellView e, portanto, edita apenas o primeiro campo de texto de cada vez.

Como posso fazer isso funcionar para poder selecionar e editar o campo correto?

Foi útil?

Solução

Encontrou uma solução:

  • subclasse NSTableView / NSOutlineView
  • na subclasse, substituir - (void) mouseDown:(NSEvent *)theEvent

Em 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];

Em 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];
}

Referência completa: Responder a eventos de mouse no campo de texto na visualização de tabela baseada em visualização

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top