Vários NSTextFields em NSTableCellView;somente o primeiro pode ser editado diretamente
-
21-12-2019 - |
Pergunta
Tenho vários NSTextFields no meu NSTableCellView:
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?
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