1 votes

Précharger les cellules dans le tableView pour les utiliser avec mapView

J'ai une mapView et une tableView, chaque annotation de la mapView correspondant à une cellule de la table. Ce que je veux faire, c'est sélectionner la cellule appropriée chaque fois qu'une annotation est sélectionnée sur la carte.

Pour l'instant, je crée un dictionnaire NSDictionary lors de la création des cellules, qui associe le numéro de ligne à l'annotationID. Cela fonctionne, mais le problème est que le dictionnaire n'est pas complètement rempli tant que toutes les cellules n'ont pas été créées, et toutes les cellules ne sont pas créées tant que vous n'avez pas fait défiler tout le tableau. Ainsi, lorsque l'application démarre pour la première fois, seules les 4 annotations initialement visibles peuvent être sélectionnées dans la mapView.

Je cherche donc soit une méthode pour remplir automatiquement mon dictionnaire, soit une meilleure façon d'accomplir ce que je dois faire. Merci beaucoup !

1voto

iWasRobbed Points 26926

Je pense d'abord qu'au lieu de remplir le dictionnaire NSDictionary pendant le défilement, il suffit de le remplir pendant le défilement. viewDidLoad Je fais quelque chose de similaire en plaçant toutes mes données dans un fichier NSDictionary et l'utiliser ensuite pour initialiser/mettre à jour l'interface utilisateur sur les cellules pendant le défilement des cellules réutilisables.

De plus, en plaçant vos données dans un tableau quelconque, vous pouvez également les mettre en correspondance avec les cellules. Souvenez-vous simplement que les tableaux commencent à 0, donc position in table = indexOfYourArray + 1

Exemple simple de chargement d'un tableau stocké dans un plist dans un NSArray dans viewDidLoad

// Load the data 
    NSString *pathToFile = [[NSBundle mainBundle] pathForResource:someArrayNameString ofType:@"plist"];
    self.someArrayYouCreated = [NSArray arrayWithContentsOfFile:pathToFile];

Maintenant que vous venez de déverser tout un tas de données dans ce tableau, vous pouvez l'alimenter pendant le défilement dans la fonction cellForRowAtIndexPath

NSDictionary *dataItem = [someArrayYouCreated objectAtIndex:indexPath.row];

UILabel *label;
label = (UILabel *)[cell viewWithTag:1];
label.textColor = [UIColor colorWithRed:(58/255.f) green:(58/255.f) blue:(58/255.f) alpha:1.0];
label.text = [dataItem objectForKey:@"PersonName"];

Dans cet exemple, vous ne faites que remplir les cellules à partir d'un tableau que vous avez créé à l'aide de la fonction viewDidLoad et donc toutes vos données sont prêtes à être utilisées presque immédiatement. Si vous avez une tonne de données, vous pouvez également afficher un cercle de progression pour attendre une seconde que le tableau ait fini de se charger.

Encore une fois, je ne comprends pas très bien comment vous stockez vos données (puisque vous n'avez rien dit à ce sujet) et je ne peux donc que supposer que cela fonctionnera pour vous. Jusqu'à ce que vous fournissiez plus de détails, c'est le mieux que je puisse faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X