UITableView检测最后一个单元
如何检测UITableView
何时滚动到底部以便最后一个单元格可见?
在UITableViewDelegate中实现tableView:willDisplayCell:forRowAtIndexPath:
方法,并检查它是否是最后一行。
在tableView:cellForRowAtIndexPath:
或tableView:willDisplayCell:forRowAtIndexPath:
像这样:
- (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 } }
对于Xcode 8和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 } }
对于Xcode 8和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") } }
为UITableView
创build优雅的扩展:
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 } }
使用示例:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if tableView.isLast(for: indexPath) { //do anything then } return cell }
我有一些与willDisplayCell方法的问题。 这适用于我:
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") } }
只需在委托方法中传递这个参数,并将“table”更改为tableView。