Das Problem, dass die Tastatur nicht geschlossen wird, wird schwerwiegender keyboardType='numeric', da dies nicht möglich ist.
Das Ersetzen von View durch ScrollView ist keine korrekte Lösung. Wenn Sie mehrere textInputs oder buttons haben, wird durch Tippen auf diese bei aktivierter Tastatur nur die Tastatur geschlossen.
Der richtige Weg besteht darin, View mit zu kapseln TouchableWithoutFeedbackund aufzurufenKeyboard.dismiss()
BEARBEITEN: Sie können jetzt ScrollViewmit verwenden keyboardShouldPersistTaps='handled', um die Tastatur nur zu schließen, wenn das Tippen nicht von den untergeordneten Elementen ausgeführt wird (z. B. Tippen auf andere Texteingaben oder Schaltflächen).
Wenn Sie haben
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
Ändern Sie es in
<ScrollView contentContainerStyle={{flexGrow: 1}}
keyboardShouldPersistTaps='handled'
>
<TextInput keyboardType='numeric'/>
</ScrollView>
oder
import {Keyboard} from 'react-native'
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
</TouchableWithoutFeedback>
BEARBEITEN: Sie können auch eine Komponente höherer Ordnung erstellen, um die Tastatur zu schließen.
import React from 'react';
import { TouchableWithoutFeedback, Keyboard, View } from 'react-native';
const DismissKeyboardHOC = (Comp) => {
return ({ children, ...props }) => (
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<Comp {...props}>
{children}
</Comp>
</TouchableWithoutFeedback>
);
};
const DismissKeyboardView = DismissKeyboardHOC(View)
Verwenden Sie es einfach so
...
render() {
<DismissKeyboardView>
<TextInput keyboardType='numeric'/>
</DismissKeyboardView>
}
HINWEIS: Dies accessible={false}ist erforderlich, damit das Eingabeformular weiterhin über VoiceOver zugänglich ist. Sehbehinderte werden es Ihnen danken!