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 textInput
s oder button
s haben, wird durch Tippen auf diese bei aktivierter Tastatur nur die Tastatur geschlossen.
Der richtige Weg besteht darin, View mit zu kapseln TouchableWithoutFeedback
und aufzurufenKeyboard.dismiss()
BEARBEITEN: Sie können jetzt ScrollView
mit 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!