Il problema con la tastiera che non si elimina diventa più grave se si dispone keyboardType='numeric'
, in quanto non è possibile ignorarlo.
Sostituire la vista con ScrollView non è una soluzione corretta, come se si dispone di più textInput
S o button
S, toccandoli mentre la tastiera è in alto si eliminerà solo la tastiera.
Il modo corretto è di incapsulare View con TouchableWithoutFeedback
e chiamandoKeyboard.dismiss()
EDIT: ora puoi usare ScrollView
con keyboardShouldPersistTaps='handled'
per chiudere la tastiera solo quando il tocco non è gestito dai bambini (es. Toccando altri input o pulsanti di testo)
Se hai
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
Modificalo in
<ScrollView contentContainerStyle={{flexGrow: 1}}
keyboardShouldPersistTaps='handled'
>
<TextInput keyboardType='numeric'/>
</ScrollView>
o
import {Keyboard} from 'react-native'
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
</TouchableWithoutFeedback>
EDIT: è inoltre possibile creare un componente di ordine superiore per chiudere la tastiera.
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)
Usalo semplicemente così
...
render() {
<DismissKeyboardView>
<TextInput keyboardType='numeric'/>
</DismissKeyboardView>
}
NOTA: accessible={false}
è necessario per rendere accessibile il modulo di input tramite VoiceOver. Le persone ipovedenti ti ringrazieranno!