2017-12-14 2 views
6

Könnte jemand mich wissen lassen, wie ich automatisch scrollView scrollen kann, wenn ein Keyboard-Benutzer versucht zwischen verschiedenen UI Elementen in der ScrollView zu navigieren 'Tab-Taste? Wenn ich die "TAB" -Taste drücke, wird der Fokus auf ein anderes in der scrollView vorhandenes UI-Element verschoben, aber es wird nicht geblättert, wenn das UI-Element nicht in der sichtbaren Inhaltsansicht vorhanden ist. Wie kann dies erreicht werden? Hilfe wäre willkommen. Vielen Dank.Eingabehilfen: ScrollView zum automatischen Scrollen zur Ansicht, die beim Drücken von "TAB" nicht sichtbar sind

+0

Möchten Sie im Code scrollen? Hast du irgendwas versucht? – Willeke

+0

Ja. Ich möchte, dass die Bildlauffunktion automatisch ausgeführt wird, wenn die Ansicht scharf gestellt wird und sich nicht im sichtbaren Bereich von scrollView befindet. Ich habe 'Autoscroll:' mit Fehler ausprobiert. Ich habe keine Ahnung, was ich tun muss. Hoffe, du hast meine Anforderung. Bitte kommentieren. –

+0

Versuchen Sie '[view scrollRectToVisible: view.bounds]'. – Willeke

Antwort

3

Lösung A: Erstellen Sie eine Unterklasse von NSWindow und überschreiben Sie makeFirstResponder:. makeFirstResponder wird aufgerufen, wenn sich der Erstantworter ändert.

- (BOOL)makeFirstResponder:(NSResponder *)responder { 
    BOOL madeFirstResponder = [super makeFirstResponder:responder]; 
    if (madeFirstResponder) { 
     id view = [self firstResponder]; 
     // check if the new first responder is a field editor 
     if (view && [view isKindOfClass:[NSTextView class]] && [view isFieldEditor]) 
      view = [view delegate]; // the control, usually a NSTextField 
     if (view && [view isKindOfClass:[NSControl class]] && [view enclosingScrollView]) { 
      NSRect rect = [view bounds]; 
      rect = NSInsetRect(rect, -10.0, -10.0); // add a margin 
      [view scrollRectToVisible:rect]; 
     } 
    } 
    return madeFirstResponder; 
} 

Lösung B: Erstellen einer Unterklasse von NSTextField und andere Steuerelemente und becomeFirstResponder außer Kraft setzen.

- (BOOL)becomeFirstResponder { 
    BOOL becameFirstResponder = [super becomeFirstResponder]; 
    if (becameFirstResponder) { 
     if ([self enclosingScrollView]) { 
      NSRect rect = [self bounds]; 
      rect = NSInsetRect(rect, -10.0, -10.0); // add a margin 
      [self scrollRectToVisible:rect]; 
     } 
    } 
    return becameFirstResponder; 
} 
+0

Danke @Willek. Ich hatte etwas ähnliches versucht, aber es hat nicht funktioniert, es funktioniert bei NSWindow es funktioniert wie Charme. –

Verwandte Themen