iPhone Clavier Couvre UITextField
J'ai une appli où, dans Interface Builder, j'ai mis en place un UIView
qui a un champ de texte en bas de la vue. Quand je lance l'application et essayez d'entrer du texte dans ce champ, le clavier glisse overtop de le domaine donc je ne vois pas ce que je suis en tapant jusqu'à ce que je me cacher de nouveau le clavier.
Quelqu'un d'autre a rencontré ce problème et trouvé une bonne façon de résoudre sans faire de la vue parent de défilement ou en déplaçant le champ de texte plus haut sur l'écran?
Vous devez vous connecter pour publier un commentaire.
La solution habituelle consiste à faire glisser le champ (et tout au-dessus d'elle) avec une animation, puis de nouveau vers le bas lorsque vous avez terminé. Vous devrez peut-être mettre le champ de texte et d'autres éléments dans un autre point de vue et faites glisser le point de vue en tant qu'unité. (J'appelle ces choses "plaques", comme dans "tectonique des plaques", mais c'est juste moi). Mais ici, c'est l'idée générale si vous n'avez pas besoin d'obtenir la fantaisie.
Ce fait des merveilles pour moi coulissante uitextfields
En particulier, il a l'avantage de calcul de la diapositive d'animation de la distance en fonction de la position du champ de texte.
IQKeyboardManager le faire pour vous avec AUCUNE LIGNE DE CODE, seulement le besoin de faire glisser et de déposer liées fichier source du projet. IQKeyboardManager également en charge Orientation du Périphérique, Automatique UIToolbar Gestion, keyboardDistanceFromTextField et beaucoup plus que vous le pensez.
Ici est le Contrôle de Flux Graphique:
Etape 1:- Ajoutée globale des notifications de
UITextField
,UITextView
, etUIKeyboard
dans une classe singleton. Je l'ai appelé IQKeyboardManager.Etape n ° 2:- Si trouvé
UIKeyboardWillShowNotification
,UITextFieldTextDidBeginEditingNotification
ouUITextViewTextDidBeginEditingNotification
notifications, puis essayer d'obtenirtopMostViewController
instance de laUIWindow.rootViewController
hiérarchie. Afin de bien découvrirUITextField
/UITextView
sur elle,topMostViewController.view
s'image doit être ajusté.Etape 3:- Calculé devrait distance de déplacement de
topMostViewController.view
à l'égard des premières réponduUITextField
/UITextView
.Etape n ° 4:- Déplacé
topMostViewController.view.frame
vers le haut/vers le bas en fonction de la distance de déplacement.Etape 5:- Si trouvé
UIKeyboardWillHideNotification
,UITextFieldTextDidEndEditingNotification
ouUITextViewTextDidEndEditingNotification
de notification, puis essayez à nouveau d'obtenirtopMostViewController
instance de laUIWindow.rootViewController
hiérarchie.Etape 6:- Calculé perturbé distance de
topMostViewController.view
qui doit être restauré à leur position d'origine.Step7:- Restauré
topMostViewController.view.frame
selon l'perturbé distance.Step8:- Instancié singleton IQKeyboardManager instance de la classe sur l'application de la charge, de sorte que chaque
UITextField
/UITextView
dans l'app s'ajuste automatiquement en fonction de la distance de déplacement.C'est tout
De s'étendre sur les Amagrammer réponse, voici un exemple de classe:
LoginViewController.h
Avis que nous sommes la mise en œuvre de la "UITextFieldDelegate"
LoginViewController.m
UIApplicationDidEnterBackgroundNotification
, sinon, il vous déplacez plus à la baisse si l'on presse le bouton Home enfoncé et revenir à l'application, à l'origine de moche et buggé.Comment au sujet de la solution officielle: Déplacement du Contenu Qui Se Trouve Sous le Clavier
J'ai face à la même question dans
UITableView
textField cellules. - Je résoudre ce problème par la mise en œuvre de méthode suivante pour écouter le clavier de notification.Observateur pour les notifications ici:
Poignée de ceux notification par ci-dessous à l'aide de la fonction:
Vérifier cela.
Pas de tracas pour vous.
Cette solution est très soignée. Tout ce que vous avez à faire est d'ajouter vos objets textfield dans un
UIScrollView
et le changement de sa classe àTPKeyboardAvoidingScollView
, si vous utilisez des story-boards. Le défilement de la vue est prolongée d'une façon telle qu'elle permettrait de détecter lorsque le clavier est visible et se déplace lui-même au-dessus du clavier à une distance raisonnable. C'est la solution parfaite, car son indépendant de votreUIViewController
. Chaque chose nécessaire est fait dans le mentionné ci-dessus de la classe. Merci Michael Tyson et tous.TPKeyboardAvoiding
Ci-dessous est une swift version de Amagrammer de réponse. Aussi, une variation à l'aide de la UIKeyboardWillShowNotification événement, car j'ai besoin de connaître les claviers de taille avant de déplacer le point de vue de la route.
Il y avait une soluce grande à l'édition textfields sans occulter (lien mort maintenant, voici une Wayback lien: https://web.archive.org/web/20091123074029/http://acts-as-geek.blogspot.com/2009/11/editing-textfields-without-obscuring.html). Il montre comment les déplacer
UIView
sur unUIScrollView
, et pour faire défiler automatiquement lorsque le clavier apparaît.Je l'ai mis à jour un peu pour calculer la hauteur de la
UIScrollView
quand il y a des contrôles (comme unUITabBar
) en dessous de laUIScrollBar
. Voir post mise à jour de uiview.Voici une solution à l'aide de Xcode5, iOS7:
Utiliser le UITextfieldDelegate de l'animation et de blocs.
C'est presque tout le code pour le ViewController mais je voulais inclure le délégué de code pour ceux qui ont encore un peu familier avec le modèle de délégué (comme moi). J'ai aussi inclus un code pour masquer le clavier lorsque vous appuyez loin de la textview.
Vous pouvez déplacer les points de vue(des boutons, des textfields, etc) aussi haut que vous le souhaitez assurez-vous de remettre en place (+100 puis plus tard -100).
Je suppose qu'une solution serait de déplacer l'ensemble de votre vues position (x,y) pour (x,y-keybaardHeight) lorsque le champ est cliqué et le remettre lorsque le clavier est rejetée , peut paraître un peu bizarre comme le point de vue vient juste (peut-être il ne serait pas mal si vous l'animer).
En plus de Amagrammer la solution, si vous utilisez cocos2d en mode portrait modifier cette ligne:
à ceci:
Si vous utilisez cocos2d en mode paysage, faire le changement ci-dessus et de passer la
up
valeurs danstextFieldDidBeginEditing:
ettextFieldDidEndEditing:
J'ai eu le même problème et trouvé GTKeyboardHelper être un moyen facile de sortir.
Après faites glisser et déposez le cadre de votre projet, inclure le fichier d'en-tête.
Téléchargez et ouvrez le projet exemple, puis faites glisser le "Keyboard Helper" objet de la section objets dans le xib à la section objets dans votre projet d'interface builder.
Glisser et déposer tous vos points de vue pour être des enfants de la "Keyboard Helper".
Glisser-déposer cadre que j'utilise dans mes projets. Prend en charge automatique de licenciement lorsque vous appuyez à l'extérieur de l'intervenant de première ligne ou lorsque vous faites défiler.
GTKeyboardHelper
Il suffit de glisser la vue vers le haut et vers le bas selon les besoins :
N'oubliez pas de mettre
self
comme unUITextFieldDelegate
et que le textFielddelegate
.(Grâce à Ammagrammer, c'est juste une courte réponse à l'aide de blocs pour les animations)
J'ai autre chose si vous voulez. Le point ici est que vous voulez définir le centre de votre UIView sur le champ de texte que vous éditez.
Avant cela, vous devez enregistrer votre INITIAL_CENTER, comme un CGPoint, de l'auto.vue.centre de et votre INITIAL_VIEW comme un CGRect de soi.vue.dans un cadre const propriété.
Vous pouvez créer une méthode comme ceci :
Ensuite, sur votre UITextFieldDelegate, vous devez appeler centeren:(CGRect) dans les méthodes suivantes :
textFieldDidBeginEditing:(UITextField*) avec, en paramètre, le cadre du champ de texte que vous voulez centrer sur.
Et que vous devez appeler dans votre gestionnaire d'événements, où vous fermez votre clavier,
textFieldDidEndEditing:(UITextField*) peut être l'une des façons de le faire, de mettre le INITIAL_VIEW en tant que paramètre de centeren:(CGRect).
Je crois que sur les nouvelles versions d'iOS (6.1+, peut-être même plus tôt), la vision sous-jacente, au moins pour UITableView, auto-se réduit lorsque le clavier apparaît. Si vous avez seulement besoin de faire le champ de texte visible de ce point de vue. Dans
init
:alors:
https://github.com/ZulwiyozaPutra/Shift-Keyboard-Example J'espère que cette solution a aidé. Ils sont tous Swift 3.
HTML: