Je développe une application qui utilise SQLite. Je souhaite afficher une liste d'utilisateurs (UITableView) à l'aide d'un mécanisme de pagination. Quelqu'un pourrait-il me dire comment charger plus de données dans ma liste lorsque l'utilisateur fait défiler jusqu'à la fin de la liste (comme sur la page d'accueil de l'application Facebook)?
ios
iphone
uitableview
pagination
rokridi
la source
la source
launchReload
la responsabilité de la méthode de le gérer (par exemple, une seule action de rechargement asynchrone à la fois)if !lastItemReached && indexPath.row == dataArray!.hits.count - 1 {
self.launchReload
méthode?Rapide
Méthode 1: Fait défiler vers le bas
Voici la version Swift de la réponse de Pedro Romão . Lorsque l'utilisateur arrête de faire défiler, il vérifie s'il a atteint le bas.
Méthode 2: atteint la dernière ligne
Et voici la version Swift de la réponse de shinyuX . Il vérifie si l'utilisateur a atteint la dernière ligne.
Exemple de
loadMore()
méthodeJ'ai configuré ces trois variables de classe pour récupérer des lots de données.
C'est la fonction pour charger plus d'éléments de la base de données dans la vue de table.
la source
Mieux vaut utiliser la
willDisplayCell
méthode pour vérifier si la cellule sera chargée. Une fois que nous obtenons le courant,indexPath.row
nous pouvons charger plus de cellules. Cela chargera plus de cellules lors du défilement vers le bas.la source
Détails
Solution
Usage
init
manipulation
Échantillon complet
Résultat
la source
Si vous utilisez Core Data et
NSFetchedResultsController
, celaloadMore
pourrait ressembler à ce qui suit:la source
J'ai implémenté une solution que j'ai trouvée dans stackoverflow, et cela fonctionne bien, mais je pense que la solution de shinyuX est très facile à implémenter et fonctionne bien pour ma proposition. Si quelqu'un veut une solution différente, vous pouvez utiliser celle-ci ci-dessous.
la source
Détails
Solution
ajoutez cette extension UITableView + dans votre nouveau fichier
Maintenant, ajoutez simplement la ligne de code suivante dans UITableViewDelegate Method willDisplay Cell dans votre ViewController et assurez-vous que tableView.delegate = self
Résultat
Voilà ... J'espère que cela vous sera utile. Merci
la source
Utilisez la limite et le décalage dans vos requêtes et remplissez votre tableview avec ce contenu. Lorsque l'utilisateur fait défiler vers le bas, chargez le décalage suivant.
Implémentez la
tableView:willDisplayCell:forRowAtIndexPath:
méthode dans votreUITableViewDelegate
et vérifiez si c'est la dernière lignela source
Le lien ci-dessous fournira un exemple de code. # Swift3
L'utilisateur doit extraire la dernière cellule de vue du tableau, au moins une hauteur de 2 cellules pour récupérer plus de données du serveur.
Vous trouverez la cellule de processus pour afficher également le processus de chargement comme dans la dernière cellule.
C'est dans Swift3
https://github.com/yogendrabagoriya/YBTableViewPullData
la source
Une autre option à utiliser ( Swift 3 et iOS 10+):
Pour les pages plutôt petites (~ 10 éléments), vous voudrez peut-être ajouter manuellement des données pour les pages 1 et 2 car nextPage peut être quelque part environ 1-2 jusqu'à ce que le tableau ait quelques éléments à bien faire défiler. Mais cela fonctionnera très bien pour toutes les pages suivantes.
la source
très bonne explication sur ce post.
http://useyourloaf.com/blog/2010/10/02/dynamically-loading-new-rows-into-a-table.html
simple, vous devez ajouter la dernière ligne et la masquer et lorsque la ligne du tableau atteint la dernière ligne, affichez la ligne et chargez plus d'éléments.
la source
vous devriez vérifier ios UITableViewDataSourcePrefetching.
la source
pour le chargement depuis une API, ça marche pour moi, Xcode 10 , swift 4.2 :
1- Créez un nouveau fichier Swift et faites comme ceci:
2- dans votre fichier ViewController (tableView Controller):
si vous utilisez tableView dans votre jeu viewController délégué , source de données auto à viewDidLoad.
la source
Je veux juste partager cette approche:
NSLog(...);
la sortie serait quelque chose comme:C'est bon pour afficher les données stockées localement. Initialement, je déclare le dataLimit à 25, cela signifie que uitableview aura 0-24 (initialement).
Si l'utilisateur a fait défiler vers le bas et que la dernière cellule est visible
dataLimit
sera ajoutée avec 25 ...Remarque: cela ressemble plus à une pagination de données UITableView, :)
la source
la source
La meilleure façon de résoudre ce problème est d'ajouter une cellule au bas de votre tableau, et cette cellule contiendra un indicateur.
En bref, vous devez ajouter ceci:
regardez le code ci-dessous:
Pour la vue tableau: numOfRows:
cellForRawAt indexPath:
Si vous remarquez que ma cellule de chargement est créée à partir d'un fichier nib. Ces vidéos expliqueront ce que j'ai fait.
la source
la source
Pour Xcode 10.1, Swift 4.2
Cette vidéo semble être un excellent tutoriel!
Starter / Projet complet: https://github.com/RobCanton/Swift-Infinite-Scrolling-Example
la source