UITableView: redimensionnement automatique à l'activation d'un UITextField
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 ?
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 ?
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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 ?
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.
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.
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.
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é.