El problema con el teclado no se descarta se vuelve más grave si lo tiene keyboardType='numeric'
, ya que no hay forma de descartarlo.
Reemplazar la vista con ScrollView no es una solución correcta, ya que si tiene múltiples textInput
so button
s, tocarlas mientras el teclado está arriba solo descartará el teclado.
La forma correcta es encapsular View con TouchableWithoutFeedback
y llamandoKeyboard.dismiss()
EDITAR: ahora puede usar ScrollView
con keyboardShouldPersistTaps='handled'
solo descartar el teclado cuando los niños no manejan el toque (es decir, tocando otras entradas o botones de texto)
Si usted tiene
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
Cámbialo a
<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>
EDITAR: También puede crear un Componente de orden superior para descartar el teclado.
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)
Simplemente úsalo así
...
render() {
<DismissKeyboardView>
<TextInput keyboardType='numeric'/>
</DismissKeyboardView>
}
NOTA: accessible={false}
se requiere para que el formulario de entrada siga siendo accesible a través de VoiceOver. ¡Las personas con discapacidad visual se lo agradecerán!