Si je tape sur une entrée de texte, je veux pouvoir taper ailleurs pour supprimer à nouveau le clavier (mais pas la touche retour). Je n'ai pas trouvé la moindre information à ce sujet dans tous les tutoriels et articles de blog que j'ai lus.
Cet exemple de base ne fonctionne toujours pas pour moi avec 0.4.2 natif réactif dans le simulateur. Impossible de l'essayer sur mon iPhone pour le moment.
<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
la source
la source
Réponses:
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 oubutton
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
aveckeyboardShouldPersistTaps='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
Changez-le en
ou
EDIT: Vous pouvez également créer un composant d'ordre supérieur pour fermer le clavier.
Utilisez-le simplement comme ceci
REMARQUE: le
accessible={false}
est requis pour que le formulaire de saisie reste accessible via VoiceOver. Les malvoyants vous remercieront!la source
const DismissKeyboardHOC = (Comp) => {
onPress
pourTouchableWithoutFeedback
tirer, peu importe ce que j'essaieCela vient d'être mis à jour et documenté ! Plus de trucs cachés.
https://github.com/facebook/react-native/pull/9925
la source
utiliser ceci pour un licenciement personnalisé
la source
react-native-search-bar
Utilisez React Native's
Keyboard.dismiss()
Réponse mise à jour
React Native a exposé la
dismiss()
méthode statique sur leKeyboard
, donc la méthode mise à jour est:Réponse originale
Utilisez la
dismissKeyboard
bibliothèque de React Native .J'ai eu un problème très similaire et j'ai senti que j'étais le seul à ne pas l'avoir.
ScrollViews
Si vous avez un
ScrollView
, ou quelque chose qui en hérite comme unListView
, vous pouvez ajouter un accessoire qui fermera automatiquement le clavier en fonction des événements de presse ou de glissement.L'accessoire est
keyboardDismissMode
et peut avoir une valeurnone
,interactive
ouon-drag
. Vous pouvez en savoir plus ici .Vues régulières
Si vous avez autre chose qu'un
ScrollView
et que vous souhaitez que n'importe quelle touche pour fermer le clavier, vous pouvez utiliser un simpleTouchableWithoutFeedback
etonPress
utiliser la bibliothèque d'utilitaires React NativedismissKeyboard
pour fermer le clavier pour vous.Dans votre exemple, vous pouvez faire quelque chose comme ceci:
Remarque:
TouchableWithoutFeedback
ne peut avoir qu'un seul enfant, vous devez donc envelopper tout en dessous dans un seulView
comme indiqué ci-dessus.la source
dismiss()
méthode sur le clavier, la méthode mise à jour est le suivant :import { Keyboard } from 'react-native'; Keyboard.dismiss()
.Keyboard.dismiss()
ne fait rien puisque sa mise en œuvre dépend de se concentrer sur une entrée, ce que je ne suis plus.La réponse simple est d'utiliser un ScrollView au lieu de View et de définir la propriété scrollable sur false (il faudra peut-être ajuster un certain style cependant).
De cette façon, le clavier est supprimé au moment où je tape ailleurs. Cela peut être un problème avec react-native, mais les événements tap ne semblent être traités qu'avec ScrollViews, ce qui conduit au comportement décrit.
Edit: Merci à jllodra. Veuillez noter que si vous appuyez directement sur un autre Textinput puis à l'extérieur, le clavier ne se cachera toujours pas.
la source
Vous pouvez importer
keyboard
depuis react-native comme ci-dessous:et dans votre code pourrait être quelque chose comme ceci:
la source
static dismiss()
. Je viens d'ajouterKeyboard.dismiss()
ma méthode onSubmit (oùonSubmitEditing={() => {this.onSubmit()}})
Je suis tout nouveau sur React et j'ai rencontré exactement le même problème lors de la création d'une application de démonstration. Si vous utilisez l'
onStartShouldSetResponder
accessoire (décrit ici ), vous pouvez saisir des touches sur un vieux simpleReact.View
. Curieux d'entendre les réflexions des React-ers plus expérimentés sur cette stratégie / s'il y en a une meilleure, mais c'est ce qui a fonctionné pour moi:2 choses à noter ici. Tout d'abord, comme discuté ici , il n'y a pas encore de moyen de mettre fin à l'édition de toutes les sous-vues, nous devons donc nous référer
TextInput
directement au flou. Deuxièmement, leonStartShouldSetResponder
est intercepté par d'autres commandes tactiles au-dessus. Donc, cliquer sur unTouchableHighlight
etc (y compris un autreTextInput
) dans la vue du conteneur ne déclenchera pas l'événement. Cependant, en cliquant sur unImage
dans la vue du conteneur, le clavier disparaîtra toujours.la source
Utilisez
ScrollView
au lieu deView
et définissez l'keyboardShouldPersistTaps
attribut sur false.la source
keyboardShouldPersistTaps
attribut par défaut est false lors de l'utilisation de aScrollView
. Je viens de mettre à jour mon React-Native vers la dernière version et le problème avec le passage à une secondeTextInput
persiste toujours. Le clavier n'est alors pas licenciable. Avez-vous trouvé une solution à ce problème spécifique?keyboardShouldPersistTaps
-il? Pourquoi est-ce pertinent ici? MerciSi quelqu'un a besoin d'un exemple pratique de la façon de rejeter une entrée de texte multiligne, allez-y! J'espère que cela aide certaines personnes, les documents ne décrivent pas du tout un moyen de rejeter une entrée multiligne, au moins il n'y avait aucune référence spécifique sur la façon de le faire. Encore un noob à publier ici sur la pile, si quelqu'un pense que cela devrait être une référence au message réel pour lequel cet extrait a été écrit, faites-le moi savoir.
la source
Utilisation mise à jour de
ScrollView
forReact Native 0.39
Cependant, il y a toujours un problème avec deux
TextInput
boîtes. par exemple. Un formulaire de nom d'utilisateur et de mot de passe ferait désormais disparaître le clavier lors du basculement entre les entrées. J'adorerais avoir quelques suggestions pour garder le clavier en vie lorsque vous basculez entre les deuxTextInputs
en utilisant aScrollView
.la source
0.40
miseskeyboardShouldPersistTaps
à jour de aboolean
à anenum
avec une valeur possible de «traitées», ce qui est censé résoudre ce problème.Il existe plusieurs façons, si vous contrôlez un événement comme
onPress
vous pouvez l’utiliser:si vous souhaitez fermer le clavier lors de l'utilisation du défilement:
Plus d'options est lorsque l'utilisateur clique en dehors du clavier:
la source
Approche n ° 2;
Merci à l'utilisateur @ ricardo-stuven de l'avoir signalé, il existe une autre meilleure façon de supprimer le clavier que vous pouvez voir dans l' exemple dans les documents natifs de react.
Importation simple
Keyboard
et appelez sa méthodedismiss()
la source
Envelopper vos composants dans un
TouchableWithoutFeedback
peut provoquer un comportement de défilement étrange et d'autres problèmes. Je préfère envelopper mon application dans le plus élevéView
avec laonStartShouldSetResponder
propriété remplie. Cela me permettra de traiter toutes les touches non gérées puis masquer le clavier. Surtout, puisque la fonction de gestionnaire renvoie false, l'événement tactile est propagé comme d'habitude.la source
Je viens de tester cela en utilisant la dernière version React Native (0.4.2), et le clavier est fermé lorsque vous appuyez ailleurs.
Et pour info: vous pouvez définir une fonction de rappel à exécuter lorsque vous fermez le clavier en l'affectant à l'accessoire "onEndEditing".
la source
Si je ne me trompe pas, la dernière version de React Native a résolu ce problème de pouvoir fermer le clavier en appuyant sur.
la source
Que diriez-vous de placer un composant tactile autour / à côté de
TextInput
?la source
Enveloppez tout votre composant avec:
Travaillé pour moi
la source
https://facebook.github.io/react-native/docs/keyboard.html
Utilisation
pour masquer le clavier.
la source
Le module clavier est utilisé pour contrôler les événements du clavier.
import { Keyboard } from 'react-native'
Ajoutez le code ci-dessous dans la méthode de rendu.
render() { return <TextInput onSubmitEditing={Keyboard.dismiss} />; }
Vous pouvez utiliser -
la source
Premier clavier d'importation
Ensuite, à l'intérieur de votre,
TextInput
vous ajoutezKeyboard.dismiss
à l'onSubmitEditing
hélice. Vous devriez avoir quelque chose qui ressemble à ceci:la source
En utilisant
keyboardShouldPersistTaps
le,ScrollView
vous pouvez transmettre "géré", qui traite des problèmes que les gens disent venir avec l'utilisation de ScrollView. Voici ce que dit la documentation à propos de l'utilisation de «géré»:the keyboard will not dismiss automatically when the tap was handled by a children, (or captured by an ancestor).
voici où il est référencéla source
react-native-keyboard-aware-scroll-view
).en cours d'
ScrollView
utilisationCela fera votre travail.
la source
Il existe de nombreuses façons de gérer cela, les réponses ci-dessus n'incluent pas
returnType
car il n'était pas inclus dans react-native à l'époque.1: Vous pouvez le résoudre en enveloppant vos composants dans ScrollView, par défaut ScrollView ferme le clavier si nous appuyons quelque part. Mais au cas où vous voudriez utiliser ScrollView mais désactiver cet effet. vous pouvez utiliser pointerEvent prop pour scrollView
pointerEvents = 'none'
.2: Si vous voulez fermer le clavier sur une presse de bouton, vous pouvez simplement utiliser
Keyboard
dereact-native
import { Keyboard } from 'react-native' and inside onPress of that button, you can use
Keyboard.dismiss () '.3: Vous pouvez également fermer le clavier lorsque vous cliquez sur la touche de retour du clavier. REMARQUE: si votre type de clavier est numérique, vous n'aurez pas de touche de retour. Ainsi, vous pouvez l'activer en lui donnant un accessoire, returnKeyType à
done
. ou vous pouvez utiliseronSubmitEditing={Keyboard.dismiss}
, il est appelé chaque fois que nous appuyons sur la touche de retour. Et si vous souhaitez fermer le clavier lorsque vous perdez la mise au point, vous pouvez utiliser l'accessoire onBlur,onBlur = {Keyboard.dismiss}
la source
Keyboard.dismiss()
le fera. Mais parfois, il peut perdre le focus et le clavier ne pourra pas trouver la référence. La façon la plus cohérente de le faire est de mettre aref=_ref
le textInput, et de le faire_ref.blur()
lorsque vous devez le fermer et_ref.focus()
lorsque vous devez ramener le clavier.la source
essayez
keyboard.dismiss()
. Ça a marché pour moila source
Voici ma solution pour ignorer le clavier et faire défiler jusqu'à TextInput (j'utilise ScrollView avec l'accessoire keyboardDismissMode):
usage:
la source
utiliser ce package
react-native-keyboard-aware-scroll-view
utiliser ce composant comme composant racine
puisque ce paquet a
react-native-keyboard-aware-scroll-view
également un scrollView, vous devez y ajouter ceci:<KeyboardAwareScrollView keyboardShouldPersistTaps="handled"> <ScrollView keyboardShouldPersistTaps="handled"></ScrollView> </KeyboardAwareScrollView>
la source