Le problème avec le clavier ne se fermant pas devient plus grave si vous l'avez keyboardType='numeric'
, car il n'y a aucun moyen de le fermer.
Remplacer la vue par ScrollView n'est pas une solution correcte, comme si vous avez plusieurs textInput
s ou button
s, taper dessus alors que le clavier est en place ne fera que fermer le clavier.
La bonne façon consiste à encapsuler View avec TouchableWithoutFeedback
et à appelerKeyboard.dismiss()
EDIT: Vous pouvez maintenant utiliser ScrollView
avec keyboardShouldPersistTaps='handled'
pour ne fermer le clavier que lorsque le toucher n'est pas géré par les enfants (c'est-à-dire en tapant sur d'autres entrées de texte ou boutons)
Si tu as
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
Changez-le en
<ScrollView contentContainerStyle={{flexGrow: 1}}
keyboardShouldPersistTaps='handled'
>
<TextInput keyboardType='numeric'/>
</ScrollView>
ou
import {Keyboard} from 'react-native'
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
</TouchableWithoutFeedback>
EDIT: Vous pouvez également créer un composant d'ordre supérieur pour fermer le clavier.
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)
Utilisez-le simplement comme ceci
...
render() {
<DismissKeyboardView>
<TextInput keyboardType='numeric'/>
</DismissKeyboardView>
}
REMARQUE: le accessible={false}
est requis pour que le formulaire de saisie reste accessible via VoiceOver. Les malvoyants vous remercieront!