Mehrere NSTextFelder in NSTableCellView;nur first kann direkt bearbeitet werden
-
21-12-2019 - |
Frage
Ich habe mehrere NSTextFelder in meiner NSTableCellView:
Mit einer Doppelklickaktion rufe ich auf [self.outlineView editColumn:0 row:clickedRow withEvent:nil select: YES];
das funktioniert bei der Aktivierung der Bearbeitung im ersten Textfeld.Ich habe auch nextKeyViews in IB eingerichtet, damit der Benutzer die Tabulatortaste drücken kann, um durch alle Felder zu blättern.Aber wenn ich versuche, die Textfelder direkt mit der Maustaste auszuwählen, funktioniert es nie.Es aktiviert / deaktiviert nur die Bearbeitung in der NSTableCellView und bearbeitet daher jedes Mal nur das erste Textfeld.
Wie kann ich das zum Laufen bringen, damit ich das richtige Feld auswählen und bearbeiten kann?
Lösung
Eine Lösung gefunden:
- unterklasse NSTableView / NSOutlineView
- überschreiben Sie in der Unterklasse
- (void) mouseDown:(NSEvent *)theEvent
Im 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];
In Kontakt INFOTABLECELLVIEWMAC:
- (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];
}
Vollständige Referenz: Reagieren auf Mausereignisse im Textfeld in der ansichtsbasierten Tabellenansicht