UITableView Detectando la última celda

¿Cómo puedo detectar cuándo un UITableView se ha desplazado hacia abajo para que la última celda esté visible?

Implemente el tableView:willDisplayCell:forRowAtIndexPath: en su UITableViewDelegate y compruebe si es la última fila.

Inside tableView:cellForRowAtIndexPath: o tableView:willDisplayCell:forRowAtIndexPath: así:

 - (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 } ... } 
 - (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 } } 

Para Xcode 8 y 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 } } 

Para Xcode 8 y swift 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") } } 

Cree una extensión elegante para 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 } } 

Ejemplo de uso:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if tableView.isLast(for: indexPath) { //do anything then } return cell } 
    Intereting Posts