Normalement, pour utiliser UITableView
, le nombre de sections et de rangées par section est connu. Mais que se passe-t-il s'ils ne le sont pas? Je veux implémenter une recherche paresseuse, de sorte que je recherche réellement la prochaine correspondance quand de nouvelles données doivent être montrées. Quelque chose sur les lignes de: db.prepareSearch(query)
, puis appelez quelque chose comme db.nextSearchResult()
quand il est temps d'afficher une nouvelle cellule. Le résultat de la recherche détermine si une nouvelle section est requise ou non (les résultats de recherche sont triés de manière inhérente). Je ne sais pas pourquoi cela n'a pas été fait de cette façon, de sorte qu'il demande une section jusqu'à ce qu'il n'y en ait plus ni disponible ni nécessaire, et pour les cellules de la section jusqu'à ce qu'il n'y en ait plus ni disponible ni nécessaire, au lieu d'avoir pour spécifier les totaux, ce qui implique d'avoir à terminer toute la recherche avant de commencer à afficher les premiers résultats.Comment utiliser UITableView lorsque le nombre total de sections et de rangées est inconnu (et potentiellement important)
Répondre
Pour obtenir le nombre de sections et de rangées, c'est facile - demandez à votre source de données. Si votre source de données n'a aucun moyen de vous le dire, faites un chemin. Par exemple, si vous devez interroger une table et demander combien de lignes correspondent à vos sections, faites-le. Ensuite, pour chaque section, demandez combien de lignes correspondent à cette section.
Il semble également que vous souhaitiez paginer vos données. Signification lorsque vous arrivez à un certain point, avoir une cellule "charger plus de données" ou un peu comme ça. C'est bien aussi, il suffit d'ajouter un nœud sentinelle à votre source de données, et chaque fois que cet élément particulier s'affiche, affichez votre cellule alternative pendant que vous chargez vos données, puis supprimez-le après que vos prochaines données soient récupérées. Je fais cela dans quelques unes de mes applications.
Si je comprends bien, au moment de dessiner/peupler, vous saurez combien de lignes/sections vous avez. Si vous modifiez les données sous-jacentes en utilisant db.nextSearchResult()
, vous devez appeler le [tableView reloadData]
pour déclencher une mise à jour de l'interface utilisateur. À ce stade, vous devez connaître le nombre de sections et de lignes que vous possédez.
Je dois admettre que je suis un peu confus à la question exacte ici.
C'est la chose, je ne sais pas combien de lignes/sections y a-t-il au total quand je commence à peupler. Par exemple, supposons que vous ayez une liste triée par ordre alphabétique de contacts (en milliers de). Et vous voulez afficher ceux qui ont le mot «blvd» dans leur adresse. Vous sectionnez par première lettre du nom de famille. Donc, vous commencez avec la première personne (M. Asdf) et la recherche.Dites que c'est un match, alors vous avez votre premier résultat, et vous continuez à collecter les 8 matchs qui correspondent à votre écran. – apalopohapa
Avec la recherche paresseuse, vous allez chercher les contacts suivants jusqu'à ce que vous trouviez une correspondance, chaque fois que l'utilisateur défile vers le bas. Et vous commencerez à remplir de plus en plus la source de données avec les résultats de la recherche, au lieu de parcourir les milliers de contacts pour que vous puissiez dire à UITableView combien de lignes/sections il y a. – apalopohapa
- 1. NSFetchedResultsController et UITableView Sections
- 2. LINQ ou DataTable lorsque le nombre de champs est inconnu
- 3. uitableview sections et lignes de xml
- 4. SQL pour le nombre total et le nombre total dans lequel la condition est vraie
- 5. Sections de regroupement UITableView
- 6. Comment créer un OnChange « un total de » fonction d'un nombre inconnu de champs de texte
- 7. Comment afficher le nombre total de messages?
- 8. Comment compter le nombre total d'enregistrements et d'affichage?
- 9. comment obtenir le nombre total de lignes
- 10. Limiter le nombre de sections de configuration
- 11. Nombre inconnu de curseurs
- 12. iPhone UITableView sections imbriquées
- 13. Nombre de rangées Distinct sans utiliser des sous-requêtes
- 14. Obtenez le nombre total d'enregistrements lorsque vous faites
- 15. uitableview: suppression de sections avec animation
- 16. Sections d'un UITableView par date
- 17. Méthode la plus simple pour obtenir le nombre total et le nombre de sous-ensembles?
- 18. CoreData: comment obtenir le nombre total
- 19. UITableView Problème avec les sections
- 20. Réorganisation entre sections dans UITableView
- 21. commande par le nombre total de lignes
- 22. WordPress - Comment afficher le nombre total de commentaires d'une entrée?
- 23. SQL TOTAL ET GRAND TOTAL
- 24. Linq- Total et sous-total
- 25. Réduire l'espace entre les sections de UITableView
- 26. Obtenir le nombre total de nœuds et de nœuds de comptage
- 27. calculer le total et afficher
- 28. iPhone UITableView avec plusieurs sections
- 29. UITableView extensible dynamique avec sections
- 30. Qu'est-ce que le sharding et pourquoi est-ce important?
Lorsque vous dites 'charger plus de données', je suppose que vous ajoutez à la source de données, puis [table reloadData] non? Ne va-t-il pas pépiller visuellement en faisant ça? – apalopohapa
Il ne devrait pas tomber en panne quand vous faites cela. Mais oui, chaque fois que vous ajoutez à la source de données, ou en supprimez, modifiez l'ordre de ses éléments, etc., vous devrez recharger vos données. Une optimisation courante consiste simplement à recharger ce qui est visible (cellules à l'écran plus typiquement 2 cellules de chaque côté de la cellule supérieure et inférieure), puisque les autres cellules au-delà de ces limites seront rechargées lorsqu'elles redeviendront visibles. – jer
Donc, disons que vous pouvez voir 10 cellules, et que vous regardez actuellement # 1 par # 10, et que vous avez indiqué à UITableView que vous avez 1 section et 12 lignes. Ensuite, l'utilisateur défile vers le bas, donc cellForRowAtIndexPath sera appelé pour la ligne 11 et peut-être 12. Ensuite, je récupère plus de données, reloadData, et dit à UITableView que j'ai 14 lignes. Est-ce qu'il demanderait seulement les rangs # 2 à # 12 et ne pas faire de pépin? – apalopohapa