UITableView ne rafraîchit pas correctement après avoir modifié dataSource
J'ai un UITableView avec plusieurs sources de données. C'est parce que, j'ai besoin de changer les données avec un UISegmentedControl, et si je les ajouter en tant que sous-vues, je ne peux pas utiliser la barre de défilement vers le haut, etc.
Au premier abord, je montre un écran de connexion:
self.tableView.dataSource = loginTableView;
self.tableView.delegate = loginTableView;
[self.tableView reloadData];
Ensuite, une fois que l'utilisateur s'est connecté, je ne les suivants: pour le changement d'indice:1 de l'segmentedControler, qui est leur profil:
self.tableView.dataSource = profileTableView;
self.tableView.delegate = profileTableView;
[self.tableView reloadData];
Cependant, la vue du tableau des mises à jour, mais il est un peu un mix entre les deux sources de données. Certains textes ont changé, certaines se chevauchent, alors que certains de il est totalement absent.
Est-il une autre façon je devrais être en train de changer la source de données pour un UITableView?
Thx
source d'informationauteur runmad
Vous devez vous connecter pour publier un commentaire.
Pas sûr de savoir pourquoi cela se passe à partir du code que vous avez posté.
Au lieu de changer le délégué et la source de données, de changer quoi que ivar représente les données affichées:
Maintenant, vous avez seulement 1 UITableViewController exemple, mais un BOOL pour vous indiquer quelle source de données à utiliser.
J'ai eu exactement le même problème. Ma solution a été de faire de la tableView caché, changement de la source, de recharger les données et de faire de la tableView de nouveau visible.
Exemple en C# (MonoTouch):
La vue de la table est la mise en cache des cellules en interne, il utilise pour l'affichage de vos données. Donc, si vous modifiez la source de données, vous devez également vérifier que votre est - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath méthode est mise à jour toutes les cellules à corriger de nouvelles valeurs.
À partir de votre description, il semble comme c'est à l'aide de la mise en cache UITableViewCell cas et n'est pas mise à jour pour corriger les nouvelles données dans tous les cas. Peut-être un code comme ceci:
La solution la plus simple que j'ai trouvé pour ce genre de problème est de simplement faire de la Chaîne de caractères que vous utilisez pour la création des cellules (CellIdentifier) en fonction de la Source de données. Dans ce cas, vous ne mélangez pas les cellules des différents types de contenu (et cela vous aide également si les cellules ont besoin d'avoir un look différent en fonction du mode).
J'ai eu ce problème, s'est avéré que c'était parce que mon CellIdentifiers étaient les mêmes...
Changement de l'un d'entre eux et les cellules de mise en page correctement
Wow, c'est bizarre.
La dernière fois j'ai fait quelque chose comme cela, j'ai simplement utilisé de multiples points de vue, en cachant l'un et montrant un autre lors de la segmentation de contrôle a été mis sur écoute. Il y a d'autres solutions possibles, mais c'est probablement plus simple et peut-être plus efficace.
J'ai le même problème et ce que vous avez à faire est d'utiliser un autre identificateur de cellule à l'intérieur de
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
.