Comment puis-je détecter si un UITableView
a été déplacé vers le bas pour que la dernière cellule soit visible?UITableView Détection de la dernière cellule
Répondre
Implémentez la méthode tableView:willDisplayCell:forRowAtIndexPath:
dans votre UITableViewDelegate et vérifiez s'il s'agit de la dernière ligne.
intérieur tableView:cellForRowAtIndexPath:
ou tableView:willDisplayCell:forRowAtIndexPath:
comme ceci:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
NSInteger sectionsAmount = [tableView numberOfSections];
NSInteger rowsAmount = [tableView numberOfRowsInSection:[indexPath section]];
if ([indexPath section] == sectionsAmount - 1 && [indexPath row] == rowsAmount - 1) {
// This is the last cell in the table
}
...
}
vous pourriez aussi bien avoir dit que je suis un mannequin. merci pour l'aide parfois je pense que ces choses sont plus difficiles qu'elles ne le sont. – Ward
numberOfSections appelle la source de données numberOfSectionsInTableView et numberOfRowsInSection appelle la source de données numberOfRowsInSection. Et dans ma mise en œuvre, il s'est écrasé en affichant ce journal récursif de cette exécution. –
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
NSInteger lastSectionIndex = [tableView numberOfSections] - 1;
NSInteger lastRowIndex = [tableView numberOfRowsInSection:lastSectionIndex] - 1;
if ((indexPath.section == lastSectionIndex) && (indexPath.row == lastRowIndex)) {
// This is the last cell
}
}
Pour Xcode 8 et rapide 3
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
let lastSectionIndex = tableView.numberOfSections - 1
let lastRowIndex = tableView.numberOfRows(inSection: lastSectionIndex) - 1
if indexPath.section == lastSectionIndex && indexPath.row == lastRowIndex {
print("this is the last cell")
}
}
Pour Xcode 8 et swift3
//Show Last Cell (for Table View)
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
{
if indexPath.row == (yourdataArray.count - 1)
{
print("came to last row")
}
}
//Show last cell (for Collection View)
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath)
{
if indexPath.row == (yourdataArray.count - 1)
{
// Last cell is visible
}
}
Créer l'extension élégante pour UITableView
:
extension UITableView {
func isLast(for indexPath: IndexPath) -> Bool {
let indexOfLastSection = numberOfSections > 0 ? numberOfSections - 1 : 0
let indexOfLastRowInLastSection = numberOfRows(inSection: indexOfLastSection) - 1
return indexPath.section == indexOfLastSection && indexPath.row == indexOfLastRowInLastSection
}
}
Exemple d'utilisation:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView.isLast(for: indexPath) {
//do anything then
}
return cell
}
J'ai eu quelques problèmes avec la méthode willDisplayCell. Cela fonctionne pour moi:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let y = scrollView.contentOffset.y/(scrollView.contentSize.height - scrollView.frame.size.height)
let relativeHeight = 1 - (table.rowHeight/(scrollView.contentSize.height - scrollView.frame.size.height))
if y >= relativeHeight{
print("last cell is visible")
}
}
Il suffit de passer cela dans les méthodes de délégué et de modifier «table» à votre tableView.
- 1. Comment démarrer UITableView sur la dernière cellule?
- 2. UITableView Détecter la cellule sélectionnée?
- 3. La dernière cellule indexée dans UITableView prend une mauvaise police
- 4. Détection de UITableView scrolling
- 5. Conserver la dernière ligne sélectionnée de UITableView
- 6. Flex: Détection de la touche "tab" à partir de la dernière cellule d'un DataGrid
- 7. définir défilement dernier UItableview cellule
- 8. Faire défiler jusqu'à la dernière table Afficher la cellule Affiche les données de la première cellule
- 9. Taille de la police de cellule UITableView
- 10. Ajuster la largeur de cellule dans UITableView
- 11. UITableView avec cellule personnalisée
- 12. Cellule de mesure Nib UITableView
- 13. UITextField dans la cellule UITableView renvoie null
- 14. UITableView ne défile pas à la cellule
- 15. UITableView Ajouter une cellule Animation
- 16. Animer changement de hauteur de cellule UITableView
- 17. Impossible de voir la dernière ligne de mon UiTableView
- 18. UISwitch dans une cellule UITableView
- 19. UITableView problème d'actualisation de cellule sur réorganiser
- 20. IPHONE - détection du glissement horizontal du doigt sur une cellule UITableView
- 21. UITableView avec des hauteurs de cellule dynamiques
- 22. La dernière ligne de UITableView est masquée par UITabBar
- 23. Cellule de création make UITableView slow
- 24. Supprimer une cellule de UITableView par programme
- 25. MySQL ne mettra pas à jour la dernière cellule de la dernière ligne d'une table
- 26. ID unique personnalisé de cellule Uitableview
- 27. Comment changer la hauteur de ligne pour seulement la dernière cellule d'une tableview?
- 28. Préserver l'image de la cellule après défilement UITableView
- 29. Comment ajouter UIButton à l'extrême droite de la cellule UITableView
- 30. Modifier le texte de la cellule dans UITableView
merci pour le conseil. J'utilise cette méthode pour déclencher un événement et il semble que l'affichage de "Will" apparaisse avant que la cellule ne s'affiche. Y a-t-il une méthode qui se déclenche après l'affichage de la cellule? – Ward
Hélas, non. Vous pouvez légèrement fudge en utilisant 'execSelector: withObject: afterDelay' avec un très court délai pour appeler une méthode qui fait ce dont vous avez besoin. –
@ArtGillespie J'ai trouvé exactement ce que je cherchais. À votre santé ! –