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
textInputsobuttons, tocarlas mientras el teclado está arriba solo descartará el teclado.La forma correcta es encapsular View con
TouchableWithoutFeedbacky llamandoKeyboard.dismiss()EDITAR: ahora puede usar
ScrollViewconkeyboardShouldPersistTaps='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) => {onPressparaTouchableWithoutFeedbackque 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-barUtilice 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
dismissKeyboardLibrary.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
keyboardDismissModey puede tener un valor denone,interactiveoon-drag. Puedes leer más sobre eso aquí .Vistas regulares
Si tiene algo diferente a
ScrollVieway desea presionar para descartar el teclado, puede usar uno simpleTouchableWithoutFeedbackyonPressusar la biblioteca de utilidades React NativedismissKeyboardpara descartar el teclado por usted.En su ejemplo, podría hacer algo como esto:
Nota:
TouchableWithoutFeedbacksolo puede tener un solo hijo, por lo que debe envolver todo debajo de él en uno soloViewcomo 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
keyboarddesde 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
onStartShouldSetResponderaccesorio (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
TextInputdirectamente a él para desenfocarlo. En segundo lugar, elonStartShouldSetResponderes interceptado por otros controles táctiles en la parte superior. Por lo tanto, hacer clic en unTouchableHighlightetc. (incluido otroTextInput) dentro de la vista del contenedor no activará el evento. Sin embargo, al hacer clic en unImagedentro de la vista del contenedor, se cerrará el teclado.fuente
Use en
ScrollViewlugar deViewy establezca elkeyboardShouldPersistTapsatributo en falso.fuente
keyboardShouldPersistTapsatributo 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 segundoTextInputaún persiste. El teclado no es descartable. ¿Has encontrado una solución para este problema específico?keyboardShouldPersistTapshacer? ¿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
ScrollViewforReact Native 0.39Aunque, todavía hay un problema con dos
TextInputcajas. 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 entreTextInputsmientras se usa aScrollView.fuente
0.40actualizacioneskeyboardShouldPersistTapsde unabooleana unaenumcon un posible valor de 'manejado' que se supone que solucionan esto.Hay algunas maneras, si puede controlar un evento como
onPresspuede 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
Keyboardy llame a su métododismiss()fuente
Ajustar sus componentes en un
TouchableWithoutFeedbackpuede causar un comportamiento de desplazamiento extraño y otros problemas. Prefiero envolver mi aplicación superior en unaViewcon laonStartShouldSetResponderpropiedad 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
TextInputagregasKeyboard.dismissalonSubmitEditingaccesorio. Deberías tener algo parecido a esto:fuente
Usando
keyboardShouldPersistTapsen elScrollViewpuede 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
ScrollViewusoEsto hará tu trabajo.
fuente
Hay muchas formas de manejar esto, las respuestas anteriores no incluyen,
returnTypeya 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
Keyboarddesdereact-nativeimport { Keyboard } from 'react-native' and inside onPress of that button, you can useKeyboard.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=_refde 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-viewusa ese componente como tu componente raíz
react-native-keyboard-aware-scroll-viewComo este paquete también tiene scrollView, debe agregarlo:<KeyboardAwareScrollView keyboardShouldPersistTaps="handled"> <ScrollView keyboardShouldPersistTaps="handled"></ScrollView> </KeyboardAwareScrollView>fuente