我是iOS开发的新手,目前正在使用UITableView。我想在设备屏幕上找到最后一个可见的单元格,屏幕底部的单元格必须是蓝色,当单元格滚动到屏幕顶部时,它应该渐变为绿色。
我已经浏览了这些链接
但无法获得成功。任何人都可以提供如何检测最后一个细胞的想法。细胞淡化动画?
答案 0 :(得分:4)
获取最后一个可见的单元格:
if let lastCell = tableView.visibleCells.last {
// do something with lastCell
}
答案 1 :(得分:1)
在Swift 3.0中,您可以使用此tableview方法。
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
{
let intTotalrow = tableView.numberOfRows(inSection:indexPath.section)//first get total rows in that section by current indexPath.
//get last last row of tablview
if indexPath.row == intTotalrow - 1{
// call for last display
}
}
答案 2 :(得分:0)
试试这段代码,它会起作用
最初声明
int firstIndexRow;
int lastIndexRow;
在ViewDidLoad()
中写下面的代码 [myTable reloadData]; //Reload because get visible last cell index row
firstIndexRow = 0;
lastIndexRow = (int)[self.myTable.indexPathsForVisibleRows lastObject].row;
NSLog(@"first : %d",firstIndexRow);
NSLog(@"Bottom : %d",lastIndexRow);
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
NSIndexPath *firstVisibleIndexPath = [[self.myTable indexPathsForVisibleRows] objectAtIndex:0];
NSIndexPath *lastObject = [self.myTable.indexPathsForVisibleRows lastObject];
firstIndexRow = (int)firstVisibleIndexPath.row;
lastIndexRow = (int)lastObject.row;
NSLog(@"first : %d",firstIndexRow);
NSLog(@"Bottom : %d",lastIndexRow);
[myTable reloadData];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [myTable dequeueReusableCellWithIdentifier:@"cell"];
if (indexPath.row == firstIndexRow) {
cell.textLabel.textColor = [UIColor blueColor];
}else if (indexPath.row == lastIndexRow) {
cell.textLabel.textColor = [UIColor greenColor];
}else{
cell.textLabel.textColor = [UIColor grayColor];
}
cell.textLabel.text =[namesArray objectAtIndex:indexPath.row];
return cell;
}
答案 3 :(得分:0)
@shallowThought解决方案仅在已经显示单元格的情况下有效。
但是,如果您想知道尚未显示并将要显示的单元格的最后一个单元格,我们可以为UITableView
创建扩展,如下所示:
func isLastVisibleCell(at indexPath: IndexPath) -> Bool {
guard let lastIndexPath = indexPathsForVisibleRows?.last else {
return false
}
return lastIndexPath == indexPath
}
这样,您可以多次检查tableView.isLastVisibleCell(...)
,直到到达实际可见的单元格为止。