J'ai un UITableView avec des cellules personnalisées qui ne peuvent recevoir que des valeurs prédéfinies. J'utilise donc un UIPickerView comme inputView. Tout va très bien jusqu'à ce que je modifie un champ et que je doive afficher sa valeur mise à jour.
Afin de rendre les choses plus claires et plus faciles à maintenir, j'ai fait des délégués et des sources de données des classes séparées, et j'utilise des notifications pour les faire interagir avec le tableView. Ainsi, après qu'une valeur ait été choisie dans l'UIPickerView, la source de données du tableView est notifiée, et à son tour notifie le ViewController principal qui détient une référence au tableView. De là, j'appelle
[_tableView reloadData];
et tout semble fonctionner, sauf que l'UIPickerView disparaît, je pense que c'est parce que les cellules sont régénérées et que quelque part un resignFirstResponder est appelé, ou quelque chose comme ça. Existe-t-il un autre moyen de faire en sorte que le tableView mette à jour ses valeurs sans avoir à implémenter une méthode personnalisée quelque part qui le fasse, ce qui serait assez laid ?
2 votes
Avez-vous essayé de ne pas recharger la vue entière du tableau, mais seulement la ligne concernée ? Essayez cette méthode : -reloadRowsAtIndexPaths:withRowAnimation :
0 votes
Resings ? hehe Oh la différence que fait l'échange de deux lettres. :-)
0 votes
Cela ne semble pas simple, vous devrez peut-être fournir des informations plus détaillées.
0 votes
@xan Merci pour l'astuce, je vais essayer. @Richard LOL merci, corrigé :)
0 votes
@xan Malheureusement cette méthode aboutit au même comportement (bien qu'elle ne recharge que la cellule choisie). Merci quand même, je vais essayer de faire ça manuellement.
0 votes
Dans le prolongement de la réflexion de @cxa : n'oubliez pas la
reloadSections:withRowAnimation:
méthode surUITableView
. Utiliser ceci a fonctionné pour moi.0 votes
Séquence
[tableView beginUpdates]
,[tableView endUpdates]
a fonctionné pour moi (iOS7)