Frage

Ich habe mehrere NSTextFelder in meiner NSTableCellView:enter image description here

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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top