Si toco una entrada de texto, quiero poder tocar en otro lugar para cerrar nuevamente el teclado (aunque no la tecla de retorno). No he encontrado la más mínima información sobre esto en todos los tutoriales y publicaciones de blog que leí.
Este ejemplo básico todavía no me funciona con react-native 0.4.2 en el simulador. No pude probarlo en mi iPhone todavía.
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit index.ios.js
</Text>
<Text style={styles.instructions}>
Press Cmd+R to reload,{'\n'}
Cmd+D or shake for dev menu
</Text>
<TextInput
style={{height: 40, borderColor: 'gray', borderWidth: 1}}
onEndEditing={this.clearFocus}
/>
</View>
react-native
TurboFish
fuente
fuente
Respuestas:
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
sobutton
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
conkeyboardShouldPersistTaps='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
Cámbialo a
o
EDITAR: También puede crear un Componente de orden superior para descartar el teclado.
Simplemente úsalo así
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!fuente
const DismissKeyboardHOC = (Comp) => {
onPress
paraTouchableWithoutFeedback
que el fuego no importa lo que intento¡Esto acaba de actualizarse y documentarse ! No más trucos ocultos.
https://github.com/facebook/react-native/pull/9925
fuente
use esto para el despido personalizado
fuente
react-native-search-bar
Utilice React Native's
Keyboard.dismiss()
Respuesta actualizada
React Native expuso el
dismiss()
método estático en elKeyboard
, por lo que el método actualizado es:Respuesta original
Utilice React Native's
dismissKeyboard
Library.Tuve un problema muy similar y sentí que era el único que no lo entendió.
ScrollViews
Si tiene un
ScrollView
, o cualquier cosa que herede de él como unListView
, puede agregar un accesorio que descartará automáticamente el teclado en función de eventos de prensa o arrastre.El accesorio es
keyboardDismissMode
y puede tener un valor denone
,interactive
oon-drag
. Puedes leer más sobre eso aquí .Vistas regulares
Si tiene algo diferente a
ScrollView
ay desea presionar para descartar el teclado, puede usar uno simpleTouchableWithoutFeedback
yonPress
usar la biblioteca de utilidades React NativedismissKeyboard
para descartar el teclado por usted.En su ejemplo, podría hacer algo como esto:
Nota:
TouchableWithoutFeedback
solo puede tener un solo hijo, por lo que debe envolver todo debajo de él en uno soloView
como se muestra arriba.fuente
dismiss()
método en el teclado, por lo que el método de actualización es:import { Keyboard } from 'react-native'; Keyboard.dismiss()
.Keyboard.dismiss()
no hace nada ya que su implementación depende de que se centre en una entrada, que ya no soy.La respuesta simple es usar un ScrollView en lugar de View y establecer la propiedad desplazable en false (aunque podría necesitar un poco de estilo).
De esta manera, el teclado se descarta en el momento en que toco en otro lugar. Esto podría ser un problema con react-native, pero los eventos de tap solo parecen manejarse con ScrollViews, lo que conduce al comportamiento descrito.
Editar: Gracias a jllodra. Tenga en cuenta que si toca directamente en otra entrada de texto y luego afuera, el teclado aún no se ocultará.
fuente
Puede importar
keyboard
desde react-native como a continuación:y en su código podría haber algo como esto:
fuente
static dismiss()
. Acabo de agregarKeyboard.dismiss()
a mi método onSubmit (dondeonSubmitEditing={() => {this.onSubmit()}})
Soy nuevo en React y me encontré exactamente con el mismo problema al hacer una aplicación de demostración. Si usa el
onStartShouldSetResponder
accesorio (descrito aquí ), puede obtener toques en un viejo planoReact.View
. Curioso por escuchar los pensamientos de los Reactores más experimentados sobre esta estrategia / si hay una mejor, pero esto es lo que funcionó para mí:2 cosas a tener en cuenta aquí. Primero, como se discutió aquí , todavía no hay una forma de finalizar la edición de todas las subvistas, por lo que debemos referirnos
TextInput
directamente a él para desenfocarlo. En segundo lugar, elonStartShouldSetResponder
es interceptado por otros controles táctiles en la parte superior. Por lo tanto, hacer clic en unTouchableHighlight
etc. (incluido otroTextInput
) dentro de la vista del contenedor no activará el evento. Sin embargo, al hacer clic en unImage
dentro de la vista del contenedor, se cerrará el teclado.fuente
Use en
ScrollView
lugar deView
y establezca elkeyboardShouldPersistTaps
atributo en falso.fuente
keyboardShouldPersistTaps
atributo predeterminado es falso cuando se usa aScrollView
. Acabo de actualizar mi react-native a la última versión y el problema de cambiar a un segundoTextInput
aún persiste. El teclado no es descartable. ¿Has encontrado una solución para este problema específico?keyboardShouldPersistTaps
hacer? ¿Por qué es relevante aquí? GraciasSi alguien necesita un ejemplo práctico de cómo descartar una entrada de texto multilínea aquí ¡ya está! Espero que esto ayude a algunas personas, los documentos no describen una forma de descartar una entrada multilínea, al menos no hubo una referencia específica sobre cómo hacerlo. Todavía es un novato para publicar aquí en la pila, si alguien piensa que esto debería ser una referencia a la publicación real para la que se escribió este fragmento, hágamelo saber.
fuente
Uso actualizado de
ScrollView
forReact Native 0.39
Aunque, todavía hay un problema con dos
TextInput
cajas. p.ej. Un formulario de nombre de usuario y contraseña ahora descartaría el teclado al cambiar entre entradas. Me encantaría obtener algunas sugerencias para mantener vivo el teclado al cambiar entreTextInputs
mientras se usa aScrollView
.fuente
0.40
actualizacioneskeyboardShouldPersistTaps
de unaboolean
a unaenum
con un posible valor de 'manejado' que se supone que solucionan esto.Hay algunas maneras, si puede controlar un evento como
onPress
puede usar:si desea cerrar el teclado cuando use el desplazamiento:
Más opción es cuando el usuario hace clic fuera del teclado:
fuente
Enfoque n. ° 2;
Gracias al usuario @ ricardo-stuven por señalar esto, hay otra manera mejor de descartar el teclado que puede ver en el ejemplo en los documentos nativos de reacción.
Importación simple
Keyboard
y llame a su métododismiss()
fuente
Ajustar sus componentes en un
TouchableWithoutFeedback
puede causar un comportamiento de desplazamiento extraño y otros problemas. Prefiero envolver mi aplicación superior en unaView
con laonStartShouldSetResponder
propiedad completada. Esto me permitirá manejar todos los toques no manejados y luego cerrar el teclado. Es importante destacar que, dado que la función del controlador devuelve falso, el evento táctil se propaga de manera normal.fuente
Acabo de probar esto usando la última versión React Native (0.4.2), y el teclado se cierra cuando tocas en otro lado.
Y para su información: puede configurar una función de devolución de llamada para que se ejecute cuando descarta el teclado asignándolo al accesorio "onEndEditing".
fuente
Si no me equivoco, la última versión de React Native ha resuelto este problema de poder cerrar el teclado tocando.
fuente
¿Qué hay de colocar un componente táctil alrededor / al lado del
TextInput
?fuente
Envuelva todo su componente con:
Trabajó para mi
fuente
https://facebook.github.io/react-native/docs/keyboard.html
Utilizar
para ocultar el teclado
fuente
El módulo de teclado se usa para controlar eventos de teclado.
import { Keyboard } from 'react-native'
Agregue el siguiente código en el método de representación.
render() { return <TextInput onSubmitEditing={Keyboard.dismiss} />; }
Puedes usar -
fuente
Primer teclado de importación
Luego dentro de tu
TextInput
agregasKeyboard.dismiss
alonSubmitEditing
accesorio. Deberías tener algo parecido a esto:fuente
Usando
keyboardShouldPersistTaps
en elScrollView
puede pasar en "manejado", que se ocupa de los problemas que la gente dice que viene con el uso de ScrollView. Esto es lo que dice la documentación sobre el uso de 'manejado':the keyboard will not dismiss automatically when the tap was handled by a children, (or captured by an ancestor).
Aquí es donde se hace referencia.fuente
react-native-keyboard-aware-scroll-view
).en
ScrollView
usoEsto hará tu trabajo.
fuente
Hay muchas formas de manejar esto, las respuestas anteriores no incluyen,
returnType
ya que no se incluyó en react-native esa vez.1: Puede resolverlo envolviendo sus componentes dentro de ScrollView, por defecto ScrollView cierra el teclado si presionamos en algún lugar. Pero en caso de que quiera usar ScrollView pero deshabilite este efecto. puedes usar pointerEvent prop para scrollView
pointerEvents = 'none'
.2: Si desea cerrar el teclado al presionar un botón, puede usar
Keyboard
desdereact-native
import { Keyboard } from 'react-native' and inside onPress of that button, you can use
Keyboard.dismiss () '.3: También puede cerrar el teclado cuando hace clic en la tecla de retorno en el teclado, NOTA: si su tipo de teclado es numérico, no tendrá una tecla de retorno. Por lo tanto, puede habilitarlo dándole un accesorio, returnKeyType a
done
. o puede usaronSubmitEditing={Keyboard.dismiss}
, se llama cada vez que presionamos la tecla de retorno. Y si desea descartar el teclado al perder el foco, puede usar onBlur prop,onBlur = {Keyboard.dismiss}
fuente
Keyboard.dismiss()
lo haré. Pero a veces puede perder el foco y Keyboard no podrá encontrar la referencia. La forma más coherente de hacerlo es poner una entradaref=_ref
de texto, y hacerlo_ref.blur()
cuando necesite descartar, y_ref.focus()
cuando necesite recuperar el teclado.fuente
probar
keyboard.dismiss()
. Funciono para mifuente
Aquí está mi solución para descartar y desplazar el teclado a TextInput girado (estoy usando ScrollView con keyboardDismissMode prop):
uso:
fuente
usa este paquete
react-native-keyboard-aware-scroll-view
usa ese componente como tu componente raíz
react-native-keyboard-aware-scroll-view
Como este paquete también tiene scrollView, debe agregarlo:<KeyboardAwareScrollView keyboardShouldPersistTaps="handled"> <ScrollView keyboardShouldPersistTaps="handled"></ScrollView> </KeyboardAwareScrollView>
fuente