[résolu] scroller UITextView pour voir le curseur

Alf1996Alf1996 Membre
juillet 2016 modifié dans API UIKit #1

Bonjour à  tous,


 


J'ai donc une UITextView toute simple (dans un storyboard), et le texte saisi par l'utilisateur peut parfois être très long, et dans ce cas, le texte saisi est masqué par le clavier.


Je pensais que les UITextView scrollaient toutes seules pour que le point d'insertion soit visible, et apparemment ce n'est pas le cas ! 


 


J'ai cherché pas mal sur SO, mais je ne dois pas utiliser les bons termes pour ma recherche... car je suis persuadée que je ne dois pas être la première confrontée à  ce problème !


 


Si vous avez un lien... ou un conseil ?


 


Merci d'avance  o:)  


 

Réponses

  • MoKeSMoKeS Membre

    Hello :-),


     


    Alors si j'ai bien compris ton problème, tu aas un UITextView partiellement masqué par le clavier. Au début tu vois le texte, mais au fur et à  mesure que tu écris, le texte se retrouve derrière le clavier.


     


    Si je ne me trompe pas, il faut prendre en compte que le clavier est un élément qui se place en "overlay", c'est à  dire qui se mets par dessus toutes les vues courantes. De ce fait, les composants derrière ce clavier ne se "rendent pas compte" qu'un clavier est affiché... 


     


    De plus, l'UITextView va commencer à  scroller uniquement si le texte dépasse la taille que le composant UITextView fait. As-tu essayé de mettre vraiment beaucoup de texte (pour tester) et voir si ça scroll déjà  ? Il est sur et certain que tu ne verras pas le curseur, il sera caché par le clavier.


     


    À partir de là , je pense que la solution à  employer serait plutôt de faire remonter ton textView lors qu'il est sélectionné, ou de modifier sa taille en conséquence, au moins que son cadre se trouve au dessus du clavier ! 


     


    Voilà  comment je fais moi : 


     


  • Merci pour ta réponse. 


    Tu as bien compris mon problème. 


    Effectivement, j'avais mis une taille de UITextView trop grande probablement. Je vais essayer de la mettre un peu plus petite. Par contre, modifier la taille à  l'apparition du clavier, je ne sais pas si c'est possible avec une vue définie par Storyboard... Je vais essayer de définir ma vue par programme, ce sera probablement plus propre dans ce cas. 


    Je teste çà  ce soir, et je reviendrai donner des nouvelles.


    Merci de ton aide.


  • MoKeSMoKeS Membre

    Tu pourrais garder ta vue dans le Storyboard et faire un lien IBOutlet vers ton controlleur ou à  défaut, fait une IBOutlet de la contrainte de hauteur (si tu es en Autolayout)


     


    Comme ça, lorsque le clavier apparaà®t tu changes simplement cette constante : 



    self.textViewHeightConstraint.constant = CGRectGetHeight(self.view.bounds) - CGRectGetMinY(self.textView.frame) - offsetDeTonChoix

    Si tu n'es pas en autolayout, tu pourras toucher directement à  la frame du TextView !


  • Alf1996Alf1996 Membre
    juin 2016 modifié #5

    Et bien grâce à  ton aide, j'ai bien avancé. J'ai utilisé les notifications et à  l'apparition du clavier, j'ai modifié la contrainte en faisant remonter le bas de la UITextView de la hauteur du clavier. En fait, je ne savais pas qu'on pouvait créer un outlet sur une contrainte (on en apprends tous les jours !!!).


     


    Voici ce que çà  donne :




    - (void)keyboardDidShow:(NSNotification *)notification {
    NSDictionary* info = [notification userInfo];
    CGRect kbRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
    _myConstrainst.constant = -kbRect.size.height;
    }

    - (void)keyboardWillBeHidden:(NSNotification *)notification {
    _myConstrainst.constant = 0;
    }


    Il me reste maintenant à  gérer le cas où l'utilisateur tourne son appareil alors que le clavier est présent... Je continue de chercher.


     


    En tout cas, merci de ton aide MoKeS   .


  • Je n'ai jamais fait ça mais la notification du clavier te donne les infos aussi de combien de temps dure l'animation d'apparition du clavier, etc. De sorte que tu peux même animer ton changement de contrainte !
  • Merci pour cette info colas_ je jetterais un coup d'oeil, ça m'intéresse !


     


    De rien Alf1996 ! Pour la rotation le principe est toujours le même, sauf que cette fois-ci c'est pas l'évènement de l'apparition du clavier que tu dois gérer mais juste l'évènement de rotation et modifier la contrainte en fonction de la position du clavier toujours ! :-). 


Connectez-vous ou Inscrivez-vous pour répondre.