UITableView: redimensionnement automatique à  l'activation d'un UITextField

CéroceCéroce Membre, Modérateur
Bonjour à  tous,





Lors de ma dernière formation, la moitié de mes stagiaires fut confrontée à  un problème.



Dans un exercice, nous construisons une UITableView dans laquelle nous plaçons des cellules statiques. Deux d'entre-elles comportent des UITextFields; le second a un UIDatePicker en inputView. Ainsi, sélectionner un text field fait respectivement apparaà®tre le clavier ou le date picker.

Ce qui est attendu est qu'à  l'apparition du clavier, la table view soit réduite automatiquement pour ne plus prendre que la moitié supérieure de l'écran. C'est bien le comportement observé sur mon poste et sur celui de la (bonne) moitié des stagiaires.



Pour l'autre (mauvaise) moitié des stagiaires, lorsque le clavier ou le date picker apparaà®t, il recouvre la table view, masquant le second text field !





J'ai fait le jeu des 7 erreurs sur les XIB de deux stagiaires sans voir de différence. Leur code m'a paru bon (malheureusement, j'ai oublié d'en prendre une copie)...





Auriez-vous une idée ?

Réponses

  • CeetixCeetix Membre
    mars 2012 modifié #2
    Bah pour moi tu as juste à  changer la frame quand ton clavier apparait (ou quand le picker apparait). Pourquoi regarder dans le xib ?

    Tu te sert des méthodes déléguée des deux composants pour setter la frame à  la moitié puis la remettre bien quand tu as fini.



    edit : en fait je trouve que ton titre est en désaccord avec la description de ton problème. Par défilement tu entends resizer la frame ou bien changer le contentOffset ?
  • CéroceCéroce Membre, Modérateur
    Justement c'est ça qui est troublant: je précise qu'il n'y a pas de code pour changer la frame de la UITableView, c'est normalement automatique. En tout cas, ça fonctionne tout seul pour la moitié d'entre nous.



    P.S.: Tu as raison, c'est un problème de redimensionnement de la table view, pas de défilement. Je viens de changer le titre.
  • Je savais pas que c'était possible. Perso je le fais par code c'est quasi aussi rapide je pense. Tu fais comment sous IB ?
  • CéroceCéroce Membre, Modérateur
    mars 2012 modifié #5
    C'est totomatique, je te dis !

    J'ai créé la UITableView dans le XIB, et mise en style Grouped.

    Les cellules sont créés dans le même XIB, on se contente d'y mettre des UITextFields puis de tirer les outlets.
  • Bah pas si totomatique que ça image/grin.gif' class='bbc_emoticon' alt=';D' />
  • AliGatorAliGator Membre, Modérateur
    C'est automatiquement géré quand tu utilises un UITableViewController, qui gère directement la UITableView.



    C'est à  toi de le gérer à  la main, en t'ajoutant comme observer aux notifications d'affichage du clavier, quand tu n'utilises pas un UITableViewController (mais un UIViewController<UITableViewDelegate,UITableViewDataSource>, par exemple)



    Point besoin de méthode de delegate. A moins qu'au lieu de t'ajouter en tant qu'observer aux notifications KeyboardWillShow & co, tu aies choisi l'approche de te connecter aux méthodes de delegate de tes UITextFields, et dans ce cas vérifier que les delegate sont bien connectés dans le XIB.
  • Ok c'est pour ça. J'utilise jamais UITableViewController. Pratique en effet.
  • CéroceCéroce Membre, Modérateur
    'AliGator' a écrit:


    C'est automatiquement géré quand tu utilises un UITableViewController, qui gère directement la UITableView.


    J'avais trouvé cette info sur le web, mais pendant la formation, je suis allé vérifier la classe du view controller et il dérivait bien de UITableViewController. C'est quasi-impossible qu'ils aient pu utiliser un simple UIViewController, ils auraient oublié de se conformer aux deux protocoles, et le compilo aurait gueulé.
Connectez-vous ou Inscrivez-vous pour répondre.