React Native erfordert zwei Eingaben, um den Eingabefokus innerhalb von scrollview zu ändern

8

Stellen Sie sich eine einfache ScrollView mit mehreren TextInputs wie

vor %Vor%

Wenn ich die erste Eingabe eingabe, öffnet sich die Tastatur und ich kann Text eingeben. Wenn ich zum zweiten Eingang wechseln möchte, muss ich zweimal tippen - der erste Typ schließt die Tastatur und nur der zweite Tipp öffnet die Tastatur für die zweite Eingabe.

Eine Lösung ist die Verwendung von keyboardShouldPersistTaps={true} - das Umschalten funktioniert einwandfrei, aber die Tastatur ist überhaupt nicht geschlossen und die Tastatur kann einige der späteren Eingänge (oder Tasten) abdecken. Ich kann auch keyboardDismissMode verwenden, aber nur die Tastatur beim Ziehen schließen.

Meine Frage ist, wie man diese beiden Verhaltensweisen - IMHO die beste Benutzererfahrung - kombiniert, wenn ich auf eine andere Eingabe klicke, der Fokus sofort geändert wird, ohne die Tastatur wieder zu öffnen, und wenn ich irgendwo anders tippe, wird die Tastatur geschlossen?

Ich verwende RN0.22 und eine Beispielanwendung ist verfügbar unter Ссылка

UPDATE - Dieses Problem wurde möglicherweise in RN 0.40 gelöst - siehe Ссылка

    
sodik 07.04.2016, 12:42
quelle

4 Antworten

3

Diese SO-Antwort ist nicht genau das, wonach Sie fragen, aber das Fenster wird automatisch aus dem Fenster entfernt hinter der Tastatur, wenn ein TextInput den Fokus hat; Das Auflösen der -Tastatur kann einige der späteren Eingaben (oder Schaltflächen) beheben.

    
Josh Buchea 08.04.2016 00:00
quelle
3

Am Ende habe ich eine Lösung gefunden, die nicht optimal ist (aus der Coding-Perspektive), aber aus der Benutzerperspektive funktioniert. Ich habe eine kleine Komponente erstellt, die anstelle von ScrollView verwendet werden kann:

%Vor%

Der einzige Nachteil ist, dass ich Node-Handles (wie von React.findNodeHandle zurückgegeben) aller Texteingaben "manuell" sammeln und als Array an die Komponente übergeben muss.

    
sodik 15.04.2016 11:32
quelle
0

Ich habe mein Problem mit diesem Code gelöst

%Vor%     
Gustavo Rozolin 24.11.2016 18:42
quelle
0

Ich habe die obige Antwort aktualisiert, weil keyboardShouldPersistTaps = {true} veraltet ist und jetzt keyboardShouldPersistTaps = 'always' verwendet wird

%Vor%     
justchill 07.02.2018 13:12
quelle

Tags und Links